内存布局
每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域:
- 代码段(代码区):用于存放代码。
- 数据段(全局区):用于存放全局变量等。
- 栈空间:每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段栈空间。自动分配和回收。
- 堆空间:需要主动去申请和释放。
堆空间
在程序运行过程,为了能够*控制内存的生命周期、大小,会经常使用堆空间的内存。
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;
}