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