linux下的4G虚拟内存管理

前言

首先我们知道,内存可以分为三个部分,分别为静态储存区内存,栈区内存和堆区内存,其中他们各自有着好处和过人之处,在这里主要来说明堆区内存

静态储存区内存

静态储存区存储的变量为为全局变量,或者可以用static修饰的变量,他的好处实是在整个程序的运行中一直存在,直到程序结束

栈区变量

栈区变量申请的是局部变量或者auto修饰的变量,栈区变量的好处是使用方便,但是自由度小,他会随着函数的结束而被释放

堆区内存

我们知道在c/c++ 中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,这时就要用到堆内存分配的概念。在堆内存中系统会通过链表去满足大小,堆内存是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆内存的大小受限于计算机系统中有效的虚拟内存。

内存空间的申请

首先需要头文件 # <stdlid.h>
其中我们常用的是malloc函数,使用这个函数向系统申请

char *p = (char) malloc (sizeof(char));    // 其中(char)为强制转换,也可以不写就为隐式转化,malloc 后面为字符的大小

其中malloc申请的内存不一定成功我们需要进行防错

if p==NULL    //我们通过判断指针是否为空
{
	perror (“申请内存失败”)
	return -1;
}

申请的空间也不一定干净,我们需要用 bzero函数

bzero (p,sizeof(char)) bzeroz 中第一个变量应该为清零的首地址,后面为大小

最后使用完还需要释放,用到free,为了防止内存泄漏

free (p)//释放内存

同样,我们还有查看内存泄漏的软件,大家可以用valgrind --tool

发布了31 篇原创文章 · 获赞 8 · 访问量 580

猜你喜欢

转载自blog.csdn.net/dongdong7_77/article/details/98960796
今日推荐