欢迎大家来到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