美文网首页
4.进程环境

4.进程环境

作者: 大雄good | 来源:发表于2016-12-14 19:51 被阅读0次

进程环境

本节主要介绍Unix的进程环境。

1.命令行参数和环境表

大多数Unix系统支持main函数带3个参数:

int main(int argc, char *argv[], char *envp[]);

argc表示命令行参数数目,argv是指向参数的指针所构成的数组,envp是环境表地址。

对于命令行参数,可以通过下面的程序进行理解:

#include "apue.h"

int main(int argc, char *argv[])
{
    int     i;

    for (i = 0; i < argc; i++)      /* echo all command-line args */
        printf("argv[%d]: %s\n", i, argv[i]);
    exit(0);
}

执行该程序可以的到:

命令行参数

环境表也是一个字符指针数组,其中每个指针包含一个以null结束的C字符串的地址,全局变量environ包含了该指针数组的地址。其结构可以由下图表示:

环境表

通常可以用getenvputenv来访问特定的环境变量,但是要查看整个环境,则必须使用environ指针。

2.C程序的存储空间

C程序一直由下列几部分组成:

  • 正文段。CPU执行的机器指令部分,通常可以共享
  • 初始化数据段。通常称为数据段,包含程序中需明确地赋初值的变量
  • 未初始化数据段。通常称为bss段,存放未赋值的变量(通常初始化为0或空指针)
  • 栈。自动变量以及每次函数调用时所需保存的信息都存放在此段中。每次函数调用时,其返回地址及调用者的环境信息都存放在栈中,然后最近被调用的函数在栈上为其自动和临时变量分配存储空间。
  • 堆。通常在堆中进行动态存储分配,通常堆位于未初始化数据段和栈直接。

下图给出了存储空间的典型布局:

存储空间布局.png

3.共享库

共享库使得可执行文件中不再需要包含公用的库函数,而只需在所有进程都可引用的存储区中保存这种库例程的一个副本。程序第一次执行或者第一次调用某个库函数时,用动态链接方法将程序与共享库函数相链接。

这样的好处在于减少了每个可执行文件的长度,缺点是增加了运行时间开销,时间开销主要发生在该程序第一次被执行时,或者共享库第一次被调用时。

4.存储空间分配

ISO C说明了3个用于存储空间动态分配的函数:

  • malloc,分配指定字节数的存储区。此存储区中的初始值不确定
  • calloc,为指定数量指定字长的对象分配存储空间。该空间中的每一位(bit)都设置为0.
  • realloc,增加或减少以前分配区的长度。当增加长度时,可能需要将以前分配区的内容移植到另一个足够大的区域,以便在尾部提供增加的存储区,而新增区域初始值则不确定。
#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size); 
void *realloc(void *ptr, size_t newsize);
/* 返回值:成功返回非空指针,失败返回NULL*/
void free(void *ptr);

相关文章

  • 4.进程环境

    进程环境 本节主要介绍Unix的进程环境。 1.命令行参数和环境表 大多数Unix系统支持main函数带3个参数:...

  • 最近使用的Centos命令

    1.查询当前进程: 2.结束当前进程: 3.复制并重命名: 4.激活Python虚拟环境: 5.修改默认的ngin...

  • centos7安装redis

    1.redis下载 2.解压,编译 3.加入环境变量 4.后台启动与关闭 5.查看redis进程

  • 进程环境

    main函数 进程的执行是从main函数开始的,下面介绍一下main函数的原型。 可以看到main函数是有两个参数...

  • 进程保活

    一.android进程的优先级 1.前台进程 2.可见进程 3.服务进程 4.后台进程 5.空进程 二.andro...

  • 浏览器工作原理与实践--读书笔记

    chrome架构包含 1. 浏览器进程 2. 渲染进程 3. 插件进程 4. gpu进程 5. 网络进程 `. 22f`

  • 应用进程的启动流程

    1.基础:Linux进程的启动(两种策略) 子进程继承父进程的执行环境 自主配置子进程的执行环境 2.Androi...

  • Linux 内存笔记基础

    系统 1. 内存管理 2. 文件目录 3. IO 4. 进程管理进程创建进程控制进程通信进程同步 5. 线程管理线...

  • cmd 命令提示符常用命令

    1.查看占用某端口号的进程 2.查看进程对应的应用程序 ** 3.根据进程号杀死进程** 4.根据名称杀死进程

  • 给Rubyist的环境变量指南

    每个进程拥有自己的一组环境变量 每个程序都至少有一个进程,每个进程有一组环境变量。环境变量随着进程关闭而消失,当你...

网友评论

      本文标题:4.进程环境

      本文链接:https://www.haomeiwen.com/subject/wofwmttx.html