今天在老师的指引下我考虑了C语言的存储空间布局,才深深的感到了自己是个小白,什么也不懂,或许那句话“程序员为啥会犯错误,不是因为他不懂什么而是因为觉得自己都懂。”
正文:
之所以在C中能自如的调用函数那都是因为栈(stack)的存在,在栈中保存着函数调用的场景信息,这句话是书上的,我是这么理解的,这些场景信息也就是包括函数的入口地址,形参,函数的返回值,以及一些寄存器的值。栈是自动分配内存的。
C语言的存储空间从高地址到低地址依次是:
命令行参数和环境变量:
栈:
堆:
非初始化数据段:未初始化的全局变量和静态变量
初始化数据段:已经初始化的全局变量和静态变量
正文段:程序就在这里
此外小知识点我还要捡起来:
printf:输出无符号整形变量 用%u
输出十六进制 用%x
今天我学到的新名词:栈帧(未完全懂)
1.静态库libstatic.a和动态库dynamic.dll
我的认识:
2.为什么要引入段地址?
inter提出用段地址+偏移地址的方式来寻址,这是为了让CPU能访问更多的内存,如果有偏移地址的话,可用的最大内存只有64KB,也就是说:
段地址存在最初意义是为了隔离。