复制代码
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/*g-global l-local * * s-static * * c-const * * n-not init * * i-init * * {type}=int char ... * * v-valued * */ #include <stdio.h> #include <stdlib.h> #define yk_macro_0 0 //? #define yk_macro_1 1 //? int yk_g_n_int; //.bss int yk_g_i_int_0=0; //.bss int yk_g_i_int_1=1; //.data static int yk_g_s_n_int; //.bss static int yk_g_s_i_int_0=0; //.bss static int yk_g_s_i_int_1=1; //.data const static int yk_g_c_s_n_int; //.bss static const int yk_g_s_c_n_int; //.bss const static int yk_g_c_s_i_int_0=0; //.rodata static const int yk_g_s_c_i_int_0=0; //.rodata const static int yk_g_c_s_i_int_1=1; //.rodata static const int yk_g_s_c_i_int_1=1; //.rodata const int yk_g_c_i_int_0=0; //.rodata const int yk_g_c_i_int_1=1; //.rodata const int yk_g_c_n_int; //.bss int main(int argc,char ** argv) //.text { int yk_l_int; //.stack,only run-time saw int yk_l_int_init_0=0; //.stack,only run-time saw int yk_1_ini_init_1=1; //.stack,only run-time saw static int yk_l_s_n_int; //.bss static int yk_l_s_i_int_0=0; //.bss static int yk_l_s_i_int_1=1; //.data const yk_l_c_n_int; //.stack,only run-time saw const yk_l_c_i_int_0=0; //.stack,only run-time saw const yk_l_c_i_int_1=1; //.stack,only run-time saw } //小结:1)const赋值的---> rodata , const没赋值的---> bss // 2)值为0的都在 bss(不管是默认给的,还是自己赋值的), 有初始值的(不为0) 全在data // 3)非static括号内的都在堆里 //使用objdump -t 查看所有符号表,然后通过grep筛选
最后
以上就是威武玫瑰最近收集整理的关于[linux c/c++] 应用程序的内存分段的全部内容,更多相关[linux内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复