程序在内存中的分段:
当程序开始运行后,会加载到内存中,会把内存分成若干个段。每一段的功能、权限不同。
代码段(code segment/text segment):
程序中的二进制指令存储在此段,只读权限。通常是指用来存放程序执行代码的一块内存区域。
只读段:存储常量、字符串字面值。可以把它和代码段合并看成一段。
BSS段(bss segment):
通常是指用来存放程序中未初始化的全局变量和未初始化静态变量的一块内存区域。BSS是英文Block Started by Symbol的简称,属于静态内存分配。BBS段在程序执行之前会被系统自动清零,所以未初始化的全局变量和静态变量在程序执行之前已经为0。
数据段(data segment):
通常是指用来存放程序中已初始化的全局变量和已初始化的静态变量的一块内存区域。数据段属于静态内存分配。
以上三段内存,程序编译完成后大小就确定了,可以使用(size 文件名)查看。
栈:
局部变量(但不包括static声明的变量,static变量存储在DATA或BSS段)、数组,由操作系统管理,自动申请、释放(auto关键字)。
堆:
由程序员手动管理。

本文深入解析程序在内存中的布局,包括代码段、只读段、BSS段、数据段的作用及区别,以及栈和堆的管理方式。了解这些基础知识对于理解程序运行机制至关重要。
1741

被折叠的 条评论
为什么被折叠?



