1.环境表:
一个字符指针数组,其中每一个指针包含一个以NULL结束的C字符串地址。
全局变量environ包含了该指针数组的地址
2.C程序的存储空间布局
-1正文段:由CPU执行的机器指令部分。可共享,只读
-2初始化数据段:也叫数据段,包含了程序中年需明确地赋初值的变量比如:
int max = 99;
将此变量以其初值存放在初始化数据段中
-3.未初始化数据段:称为bss(block started by symbol) 在程序开始之前,内核将此段中的数据初始化为0或空指针。
long sum[10000];
-4.栈:自动变量(局部变量)和函数调用时所需保存的信息
-5.堆:在堆中进行动态存储的分配
需要存放在磁盘程序文件中的段只有正文段和初始化数据段
3.存储空间分配
#include <stdlib.h>
void *malloc(size_t size); //分配指定字节数的存储区。初值不确定
void *calloc(stize_t nobj, size_t size); //为指定长度的对象分配存储空间,每一位bit 都初始化为0。
void *realloc(void *ptr, size_t newsize);//增加或减少以前分配区的长度。新增区域初值不确定
//在扩充长度的时候,如果在存储区后有足够的空间,则直接向高位地址方向扩充。否则会另外分配一个足够大的存储区,将原本现存的数据拷贝过去,然后释放原存储区,返回新的分配指针。
//成功都返回void*指针 否则返回NULL
大多数实现所分配的存储空间要比所要求的稍微大一些,额外的空间用于记录管理信息,比如:分配块的长度,指向下一个分配块的指针等。
函数alloca:他的调用鱼malloc相同,但是它是在当前函数的栈帧上分配存储空间,不会发生泄露。但是缺点是增加了栈帧的长度。