内存管理

一动态内存分配包含在<stdlib.h>

malloc所分配的是一块连续的内存,以字节为单位,
并且不带任何的类型信息
free用于将动态内存归还系统
void* malloc(size_t size);
void free(void* pointer);参数为0时,没有任何作用。

虽然malloc申请到的内存可能比实际的大,然而是不定的不能利用编译器的这一行为。如果分配时找不到足够大的内存块会返回空指针。
给n个字符的字符串分配内存空间malloc(n+1),因为malloc分配是以字节为单位的,可以不需要类型转换
void* calloc(size_t num, size_t size);为num个元素分配空间,每个空间大小为size个字节
void* realloc(void* pointer, size_t new_size);
calloc的参数代表所返回内存的类型信息
calloc会将返回的内存初始化为0
realloc用于修改一个原先已经分配的内存块大小
在使用realloc之后应该使用其返回值
当pointer的第一个参数为NULL时,等价于malloc,为0时会释放掉内存

二程序中的堆

系统对空闲链表的管理方法空闲链表法,位图法,对象池法等等
程序中的静态存储区:
程序静态存储区随着程序的运行而分配空间,直到程序运行结束
在程序的编译期静态存储区的大小就已经确定
程序的静态存储区主要用于保存程序中的全局变量和静态变量
与栈和堆不同,静态存储区的信息最终会保存到可执行程序中

三程序中的内存布局

各个段的作用
堆栈段在程序运行后才正式存在,是程序运行的基础
静态存储区.bss段存放的是未初始化的全局变量和静态变量,
.data段保存的是那些已经初始化了的全局变量和静态变量
 
程序可执行代码存放于.text段存放的是程序中的可执行代码
 只读区.rodata段存放程序中的常量值,如字符串常量



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章