c/c++中内存空间区域划分划分

c/c++中内存空间区域划分划分

思考下面代码,各种变量,数据放在哪块内存区域?

代码语言:javascript复制#include

#include

int GlobalVar=1;

static int StaticglobalVar1=1;

int main()

{

static int staticglobalVar2 = 1;

int partVar;

char arr[] = "abcdef";

int* str1 = (int*)malloc(sizeof(int) * 5);

int* str2 = (int*)malloc(sizeof(int) * 5);

if (str1 == NULL || str2 == NULL)

{

perror("malloc()");

return 1;

}

free(str1);

free(str2);

str2 = NULL;

str1 = NULL;

return 0;

} 让我们先来看看内存分为那几块区域:

1.内核空间:

(百度百科搜索)我觉得很有必要了解清楚。

Linux系统对自身进行了划分,一部分核心软件独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux将此称为内核空间。

相对地,应用程序则是在“用户空间”中运行。运行在用户空间的应用程序只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备,以及其他一些具体的使用限制。

将用户空间和内核空间置于这种非对称访问机制下有很好的安全性,能有效抵御恶意用户的窥探,也能防止质量低劣的用户程序的侵害,从而使系统运行得更稳定可靠。

也就是说,内核空间很高贵,不允许其他用户应用程序进行访问,只有核心软件才能有权限去访问内存空间,硬件设备。

2.栈区:

用来存放局部变量,函数参数。

3.内存映射段:

文件映射,动态库,匿名映射。

4.堆区:

存放动态内存(malloc,calloc,realloc函数申请的空间)。如果程序员不主动释放,由操作系统自动回收。

5.数据段(静态区):

存放全局变量,静态变量,常量。程序结束后,自动释放。

6.代码段:

存放函数体(内成员函数,全局函数)的二进制代码。

相关推荐

做一个前端页面多少钱
黑帮365天第3季是真实的吗

做一个前端页面多少钱

⌛ 2025-09-03 👁️ 3095
干货 | 弦距的标准以及DIY调整弦距的方法!
黑帮365天第3季是真实的吗

干货 | 弦距的标准以及DIY调整弦距的方法!

⌛ 2025-09-07 👁️ 4460
ipad下载哪个游戏助手好?ipad游戏软件
365beat怎么下载

ipad下载哪个游戏助手好?ipad游戏软件

⌛ 2025-10-17 👁️ 677