动态内存分配
一、内存区域
1、栈、堆、全局区、常量区、代码区
栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的
堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放
全局区:静态变量、全局变量(static)
常量区:代码中的数字、字符等常量,例如’a’,-1.2等
代码区:存放可执行代码,避免频繁的读硬盘。
2、data、bss、text
data:数据段,要放在可执行文件中的数据,包括堆、栈、已初始化的全局变量
bss:未初始化的全局变量,不占用可执行文件的大小
text:只读区域,包括常量区和代码区
2、动态内存分配的常见函数和运算符
函数:C语言中stdlib.h中提供的系列函数
void *malloc(size_t)
void *calloc(size_t, size_t)
malloc不会进行初始化,calloc会初始化空间为0,所以在追求效率的时候,使用malloc
void *realloc(void * p, size_t size)
1、申请size个字节的空间
2、将p中的值拷贝到刚申请的空间中
3、释放p,返回刚申请的空间
void free(void *)
运算符:new delete
※通过动态内存分配实例化对象的时候,new/delete会自动调用构造/析构函数,而malloc/free不会。所以在给类分配空间时,最好使用new/delete。
int * pi = new int;
delete pi;
int * pi = new int [5];
delete [] pi;