内存四区
发布日期:2021-05-07 15:25:32 浏览次数:19 分类:精选文章

本文共 2978 字,大约阅读时间需要 9 分钟。

说明:

1、.bss 不占执行文件的空间,只是记录数据所需空间的大小。bss区域的的数据由OS初始化为0;

2、.data 占可执行文件的空间,其内容由程序初始化。

所以,全局变量是否初始化(初始化为非0值),将影响可执行文件的大小。

// 头文件#include 
#include
#include
#define HEAP_ZONE_DATA 100// 全局变量--全局区int g_var1 = 0x12; //.data区int g_var2 = 0; //.bss区int g_var3; //.bss区// 全局静态变量--全局区static int g_static_var4 = 0x34; //.data区static int g_static_var5 = 0; //.bss区static int g_static_var6; //.bss区// 全局常量--全局区const int g_const_var7 = 0x56; //常量区const int g_const_var8 = 0;// const int g_const_var9; //常量必须初始化// 打印全局区数据的地址信息void test1_printGlobalZoneAddr(){// 静态局部变量--全局区 static int static_var10 = 0x78; static int static_var11 = 0; static int static_var12 ; printf("----------------------Begin:Global Zone Addr----------------\n"); printf("addr global var inited nonzero-value \t0x%llx\n", &g_var1); printf("addr global var inited zero-value \t0x%llx\n", &g_var2); printf("addr global var none inited \t\t0x%llx\n", &g_var3); printf("addr global static var inited nonzero-value \t0x%llx\n", &g_static_var4); printf("addr global static var inited zero-value \t0x%llx\n", &g_static_var5); printf("addr global static var none inited \t\t0x%llx\n", &g_static_var6); printf("addr global const var inited nonzero-value \t0x%llx\n", &g_const_var7); printf("addr global const var inited zero-value \t0x%llx\n", &g_const_var8); // printf("addr global const var none inited 0x%llx\n", &g_const_var9); printf("addr local static var inited nonzero-value \t0x%llx\n", &static_var10); printf("addr local static var inited zero-value \t0x%llx\n", &static_var11); printf("addr local static var none inited \t\t0x%llx\n", &static_var12); printf("----------------------End:Global Zone Addr----------------\n\n");}// 打印栈区数据的地址信息void test2_printStackZoneAddr(){ // 局部变量--栈区 int i_var13 = 0x9a; int i_var14 = 0; int i_var15 = 0; // const修饰局部变量-- 栈区 const int i_const_var16 = 0x9a; const int i_const_var17 = 0; // const int i_const_var18; //常量必须初始化 printf("----------------------Begin:Stack Zone Addr----------------\n"); printf("addr local var inited nonzero-value \t0x%llx\n", &i_var13); printf("addr local var inited zero-value \t0x%llx\n", &i_var14); printf("addr local var none inited \t0x%llx\n", &i_var15); printf("addr const local var inited nonzero-value \t0x%llx\n", &i_const_var16); printf("addr const local var inited zero-value \t0x%llx\n", &i_const_var17); // printf("addr const local var none inited \t0x%llx\n", &i_const_var18); printf("----------------------End:Stack Zone Addr----------------\n\n");}// 打印堆区数据的地址信息void test3_printHeapZoneAddr(){ char *p1 = (char *)malloc(HEAP_ZONE_DATA); printf("----------------------Begin:Heap Zone Addr----------------\n"); printf("Heap addr \t\t0x%llx\n", p1); printf("----------------------End:Heap Zone Addr----------------\n\n"); free(p1); p1 = NULL;}int main (){ test1_printGlobalZoneAddr(); test2_printStackZoneAddr(); test3_printHeapZoneAddr(); system("pause"); return 0;}

 

 

 

上一篇:字符数组和字符串学习总结
下一篇:leetcode 1 两数之和

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月27日 14时58分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章