欢迎大家来到IT世界,在知识的湖畔探索吧!
如题,直接看代码和注释:
#include <stdio.h> #include <stdlib.h> void fnc(int a) // 2 fnc指向代码区 {int b;} // int a,int b都是局部变量 const int c_g_v = 11; // 全局常量 int g_bss; // 4 bss区(未初始化) int g_var = 0; // 5 data区(有初始化) int main() //main函数除了其是程序的开始点以外,其中变量的作用域与普通函数无异 { int k = 0; // 1 stack栈区 char* cp = "abc"; // 3 常字符量区 static s_var = 0; // 5 data区(有初始化) int* p = (int*)malloc(sizeof(int));// 6 p指向的是动态内存的堆区(p本身保存在栈上) printf("\n%-8s %-8s %-8s %-8s %-8s %-8s\n","栈","代码区","常量区","bss区","data区","堆"); printf("%-8x %-8x ",&k,fnc); // printf("%x ",cp); printf("%-8x ",static_cast<const void *>(cp)); printf("%-8x %-8x %-8x\n",&g_bss,&g_var,p); //0012FF44 0040126C 00471078 0047EDFC 0047EE00 017F2C90 printf("%12d ",(int)fnc-(int)&k); printf("%8d ",(int)static_cast<const void *>(cp)-(int)fnc); printf("%8d ",(int)&g_bss-(int)static_cast<const void *>(cp)); printf("%5d ",(int)&g_var-(int)&g_bss); printf("%10d\n",(int)p-(int)&g_var); const int c_v = 11; // 局部常量 printf("%s%x\n","局部常量:",&c_v); printf("%s%x\n","全局常量:",&c_g_v); printf("%s%d\n","栈起始地址:",(int)&k); printf("%s\n","(栈中数据增长时,地址递减,栈中字节数量不能超过此数,否则栈溢出)"); //char arr[1034496]; //cpp ok char arr[1014496]; //c ok printf("%s%d\n","允许的字节数:",sizeof(arr)); printf("%s\n","这一块栈内存使用两个寄存器(sb,sp)跟踪。"); for(int i=0;i<11;++i); system("pause"); return 0; }
欢迎大家来到IT世界,在知识的湖畔探索吧!
-End-
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/31431.html