目录
C/C++的内存分布
频繁的new/delete堆容易产生内存碎片,栈上则没有这个问题(因为是连续分配)
栈是先进后出,先进的在内存地址大的
堆无法静态分配,只能动态分配
栈可以通过函数_alloca进行动态分配,不过注意,所分配空间不能通过free或delete进行释放
不同的数据有不同的存储需求,内存的个区间划分为了满足这些不同的需求
1、临时用(局部变量、数组等) - > 栈
2、动态使用(数据结构、算法中需要动态开辟一些空间) - > 堆
3、整个程序期间都要使用(全局变量,静态变量) - > 静态区/数据段
4、只读数据(常量、可执行代码) - > 代码段/常量区
可执行代码是指二进制代码(电脑可以看懂的那个)
咱写的那个代码存在磁盘上(存在文件中)
int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
static int staticVar = 1;
int localVar = 1;
int num1[10] = {
1, 2, 3, 4 };
char char2[] = "abcd";
const char* pChar3 = "abcd";
int* ptr1 = (int*)malloc(sizeof(int) * 4);
int* ptr2 = (int*)calloc(4, sizeof(int));
int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);