-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstack.c
More file actions
69 lines (59 loc) · 1.57 KB
/
stack.c
File metadata and controls
69 lines (59 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
int main()
{
printf("Creatig the stack frames and releasing them:\n");
printMessageOne();
printMessageTwo();
printMessageThree();
printf("\nNow with more functions in between:\n\n");
printMessageOne2Two();
printf("shows the allocation growing...\n");
return 0;
}
__attribute__((noinline)) void printMessageOne(void)
{
const char *message = "Dark mode?\n";
printStackPointerDiff();
printf("%s\n", message);
}
__attribute__((noinline)) void printMessageTwo(void)
{
const char *message = "more like...\n";
printStackPointerDiff();
printf("%s\n", message);
}
__attribute__((noinline)) void printMessageThree(void)
{
const char *message = "Dark Roast.\n";
printStackPointerDiff();
printf("%s\n", message);
}
__attribute__((noinline)) void printMessageOne2Two(void)
{
const char *message = "Dark mode?\n";
printStackPointerDiff();
printf("%s\n", message);
printMessageTwo2Three();
}
__attribute__((noinline)) void printMessageTwo2Three(void)
{
const char *message = "more like...\n";
printStackPointerDiff();
printf("%s\n", message);
printMessageThree();
}
void printStackPointerDiff(void) {
static void *last_sp = NULL;
void *current_sp;
current_sp = __builtin_frame_address(0);
long diff;
if (last_sp == NULL) {
last_sp = current_sp;
diff = 0;
} else {
diff = (char *)last_sp - (char *)current_sp;
}
printf("---------------------------------\n");
printf("Stack pointer offset: %ld bytes\n", diff);
printf("---------------------------------\n");
}