C语言之程序在内存中的分段

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

程序在内存中的分段:
当程序开始运行后,会加载到内存中,会把内存分成若干个段。每一段的功能、权限不同。

代码段(code segment/text segment):

程序中的二进制指令存储在此段,只读权限。通常是指用来存放程序执行代码的一块内存区域。
只读段:存储常量、字符串字面值。可以把它和代码段合并看成一段。

BSS段(bss segment):

通常是指用来存放程序中未初始化的全局变量和未初始化静态变量的一块内存区域。BSS是英文Block Started by Symbol的简称,属于静态内存分配。BBS段在程序执行之前会被系统自动清零,所以未初始化的全局变量和静态变量在程序执行之前已经为0。

数据段(data segment):

通常是指用来存放程序中已初始化的全局变量和已初始化的静态变量的一块内存区域。数据段属于静态内存分配。

以上三段内存,程序编译完成后大小就确定了,可以使用(size 文件名)查看。

栈:

局部变量(但不包括static声明的变量,static变量存储在DATA或BSS段)、数组,由操作系统管理,自动申请、释放(auto关键字)。

堆:

由程序员手动管理。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值