操作系统中堆和栈详解

本文详细介绍了操作系统中堆和栈的区别,包括它们的内存分配、申请方式、系统响应、大小限制、申请效率、存储内容以及存取效率。堆提供更大的灵活性,但效率较低,而栈则快速高效,但空间有限。理解堆栈原理对优化程序内存使用至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、程序的内存分配

对于一个由C/C++编译的程序,其所占用的内存可以划分为以下几个部分:

  1. 栈区(stack)—— 由操作系统自动分配和释放,主要用于存放函数参数值,局部变量等。其操作方式类似于数据结构中的栈。 
  2. 堆区(heap)—— 一般由程序员动态分配和释放,若程序员不主动释放,则程序结束后由操作系统回收。注意,它与数据结构中的堆是不同的,分配方式类似于链表。 
  3. BSS段——主要用于存放未初始化的静态变量和全局变量,可读写,它在程序结束后由操作系统进行释放。
  4. 数据段(data)——主要用于存放已初始化的静态变量和全局变量,可读写,它在程序结束后由操作系统释放。
  5. 代码段(text)——主要用于保存程序代码,包括CPU执行的机器指令,同时全局常量也是保存在代码段的,如字符串字面值。

二、程序实例

/main.cpp
int a = 0;                       // 全局初始化区域
char *p1;                        // 全局未初始化区域
int main(){
    int b;                       // 栈
    char s[] = "adoryn";         // 栈
    char *p2;                    // 栈
    char *p3 = "zhaobryant";     // 字符串字面量存放在常量区,p3存放在栈上
    static int c = 0;            // 全局(静态)初始化区域
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20);     // 分配获得的10和20字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值