内存布局、堆空间、堆空间的初始化

内存布局

每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域:

  • 代码段(代码区):用于存放代码。
  • 数据段(全局区):用于存放全局变量等。
  • 栈空间:每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段栈空间。自动分配和回收。
  • 堆空间:需要主动去申请和释放。

内存布局、堆空间、堆空间的初始化

堆空间

在程序运行过程,为了能够*控制内存的生命周期、大小,会经常使用堆空间的内存。

malloc/free:

#include <iostream>
using namespace std;

int main() {

	int *p = (int *) malloc(4);
	*p = 10;
	free(p);

	//char *p = (char *) malloc(4);
	//*p = 10;
	//*(p + 1) = 11;
	//*(p + 2) = 12;
	//*(p + 3) = 13;
	//free(p);

	getchar();
	return 0;
}

内存布局、堆空间、堆空间的初始化

new/delete:

#include <iostream>
using namespace std;

int main() {

	int *p = new int;
	*p = 10;
	delete p;
	
	//char *p = new char;
	//*p = 10;
	//delete p;

	//char* p = new char[4];
	//delete[] p;

	getchar();
	return 0;
}

堆空间的初始化

memset 函数是将较大的数据结构(比如对象、数组等)内存清零的比较快的方法。

#include <iostream>
using namespace std;

int main() {

	int size = sizeof(int) * 10;
	int* p = (int*)malloc(size);

	// 从p地址开始的连续4个字节中的每一个字节都设置为1
	// 00000001 00000001 00000001 00000001
	memset(p, 1, size);

	cout << *p << endl; // 16843009

	getchar();
	return 0;
}

内存布局、堆空间、堆空间的初始化

上一篇:最短路


下一篇:单链表oj题目