指針: 分段的內存

  • 典型的C内存空间分布图
C-memory
  • 数据(data)段
    一部分是读写区(RW):存放已初始化但非零的全局变量和静态变量.
    其中,有一部分是只读区(RO): 如常量字符串文本, 使用const定义的变量

  • BSS段
    BSS: Block Started by Symbol
    它包括未初始化的全局变量和静态变量和初始化为0的全局变量和静态变量.

举个栗子:

/***hello.c***/
#include <stdio.h>

int a;
int main()
{
    static int b;

    printf("a = %d\n",a);
    printf("b = %d\n",b);

    return 0;
}

运行,结果是:

a = 0
b = 0

可见, 未初始化的全局变量或是静态变量, 被编译器置为0.

  • 栈(stack)段
    用于存储局部变量, 函数参数和返回地址, 栈空间由编译器自动分配和释放。

  • 堆(heap)段
    调用malloc()等函数时从堆中动态分配内存, 调用free()函数将内存归还给堆.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容