Unix编程 第七章 进程环境

1.环境表:
一个字符指针数组,其中每一个指针包含一个以NULL结束的C字符串地址。
全局变量environ包含了该指针数组的地址


image.png

2.C程序的存储空间布局
-1正文段:由CPU执行的机器指令部分。可共享,只读
-2初始化数据段:也叫数据段,包含了程序中年需明确地赋初值的变量比如:

int max = 99;

将此变量以其初值存放在初始化数据段中

-3.未初始化数据段:称为bss(block started by symbol) 在程序开始之前,内核将此段中的数据初始化为0或空指针。

long sum[10000];

-4.栈:自动变量(局部变量)和函数调用时所需保存的信息
-5.堆:在堆中进行动态存储的分配

image.png

需要存放在磁盘程序文件中的段只有正文段和初始化数据段

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相同,但是它是在当前函数的栈帧上分配存储空间,不会发生泄露。但是缺点是增加了栈帧的长度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容