操作系统从低地址到高地址分别为正文段(代码区)、已初始化数据区、BSS(未初始化)、堆、栈。
正文段主要存储机器指令即执行代码。这部分区域的大小在程序运行前就已经确定,并且这个区域只读。
已初始化数据区为数据分配内存空间并保存到目标文件。
BSS(未初始化数据)没有存放在磁盘程序文件。应为它们运行前初始值为0。正文段和已初始化数据存放在目标文件中。
堆区用于动态分配内存,位于BSS和栈中间的区域。采用链式存储,频繁的malloc()和free()导致其效率比栈低。
栈区由编译器自动释放,存放函数的参数值、局部变量等。函数被调用时,函数的返回类型和调用信息被存到栈中。然后函数再为本身的自动变量和临时变量在栈上分配空间。每调用一个函数一个新的栈就会被使用.栈区是从高地址位向低地 址位增长的,是一块连续的内存区域,最大容 量是由系统预先定义好的,申请的栈空间超过这 个界限时会提示溢出,用户能从栈中获取的空间较小。
操作系统中程序的内存结构
最新推荐文章于 2023-06-19 19:58:17 发布