【基础】计算机内存分配-堆-栈等概念的区别

说明

  • 在数据结构范畴内,堆是一种排序的方式,栈是一种“先进后出”的数据结构。
  • 在内存分配的范畴内,堆是一种存储区间,该区间通过链表的方式进行组织;栈也是一种存储区间,该区间的操作类似数据结构中栈的操作方式--“先进后出”。

内存分配

  1. 静态存储区
  2. 栈区
  3. 堆区
  4. 代码存储区
  5. 常量存储区

对比说明表

分区存放内容申请与释放特别说明
静态存储区全局变量、静态变量编译器自动申请与释放初始化的放在一个子区域,未初始化的放在另一个区域。
栈区局部变量、函数参数、函数体地址编译器自动申请与释放操作方式类似数据结构中的栈“先进后出”
堆区自定义内容程序员自动申请或释放

malloc、new可申请资源、free、delete可释放资源。

未主动释放的资源,在程序结束时有系统释放。

资源的申请由系统从空闲内存链表中分配。

代码存储区程序本身的二进制数据编译器申请,系统释放 
常量存储区常量数据如字符串常量编译器申请,系统释放 

示例

//main.cpp
int a = 0;     //a全局初始化区
char *p1;      //p1全局未初始化区
int main(){
    int b;                        //b 栈
    char s[] = "abc";             //s 栈; "abc\0"常量区
    char *p2;                     //p2 栈
    char *p3 = "123456";          //"123456\0"在常量区; p3 栈。
    static int c =0;             //c 全局(静态)初始化区
    p1 = (char *)malloc(10);      //分配的10个字节在堆区
    p2 = (char *)malloc(20);      //分配的20个字节在堆区。
    strcpy(p1, "123456");         //"123456\0"放在常量区,与p3所指向的"123456"是一个地方。
}

参考链接

https://blog.csdn.net/shanchangyi/article/details/51854795

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值