服务器之家

服务器之家 > 正文

详解C/C++内存区域划分(简而易懂)

时间:2021-11-18 13:14     来源/作者:小一!

c语言在内存中一共分为如下几个区域,分别是:

1. 内存栈区: 存放局部变量名;
2. 内存堆区: 存放new或者malloc出来的对象;
3. 常数区: 存放局部变量或者全局变量的值;
4. 静态区: 用于存放全局变量或者静态变量;
5. 代码区:二进制代码。
知道如上一些内存分配机制,有助于我们理解指针的概念。

c/c++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和delete销毁new和malloc申请的堆内存,而栈内存是动态释放。

c/c++内存区域划分详解

c/c++内存分布

详解C/C++内存区域划分(简而易懂)

c/c++中,内存主要分为、堆、栈、全局/静态存储区和常量存储区。

栈:栈又叫堆栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等,是向下增长的。所谓向下生长的就是,先调用的栈帧的地址比后调用的地址大,栈一般大小有几个m左右。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
 
void f2()
{
    int b = 0;
    cout << "b:" << &b << endl;
}
void f1()
{
    int a = 0;
    cout <<"a:" <<&a << endl;
 
    f2();
}
int main()
{
    f1();
    return 0;
}

详解C/C++内存区域划分(简而易懂)

堆:就是那些由new/malloc分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new/malloc就要对应一个delete/free,由程序员主动释放。堆是可以上增长的.意思是先建立的堆的地址小于后建立的堆的地址。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
 
int main()
{
    void* p1 = malloc(10);
    void* p2 = malloc(10);
 
    cout << p1 << endl;
    cout << p2 << endl;
 
    return 0;
}

详解C/C++内存区域划分(简而易懂)

数据段:存储全局数据和静态数据。
代码段:可执行的代码/只读常量

知道了内存分布,下面就来做题吧,考验知识的时候到了,看看会做几题吧

详解C/C++内存区域划分(简而易懂)

是不是前几题还得心应手,后面就有点懵了

详解C/C++内存区域划分(简而易懂)
详解C/C++内存区域划分(简而易懂)

栈和堆的区别:

栈:由编译器自动分配并且释放,一般存储函数的参数局部变量等
堆:由程序员分配释放,若程不释放则系统释放

1、申请内存方式
栈:由系统自动分配,如变量的声明的同时会开辟空间,(int a; 开辟4个字节的空间)(静态指定)

堆:由程序员申请,需要制定大小(动态分配)
2、系统响应的不同

栈:只要剩余空间大于申请内存,系统就会提供,否则会栈溢出

堆:便历空闲地址链表,找到符合要求的,就删除该地址分配给程序,内存的首地址记录分配的大小,(方便delete)多余的内存回收

3、空间大小不同
栈:连续的,编译时就确定的常数
堆:不连续,他的上限决定于系统中有效的虚拟内存
4、执行效率的不同
栈:由系统分配,速度快
堆:程序员分配,速度慢,容易产生内存碎片,不过用起来方便

到此这篇关于c/c++内存区域划分详解的文章就介绍到这了,更多相关c++内存划分内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_49613557/article/details/118119334

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部