易截截图软件、单文件、免安装、纯绿色、仅160KB

C 程序的存储空间布局

C 程序有下面几个部分组成:
  1  正文段:这是CPU 执行的机器指令的部分。通常正文段是可以共享的,所以即使是频繁执行的程序(如:文本编辑器)在存储器上也只有一个副本。另外正文段常常是只读的,以防止程序因为意外而修改其自身的指令。
  2  初始化数据段:通常将此段称为数据段,它包含了程序中需明确赋值的变量。例如:在任何函数之外的声明:int maxcount = 99; 是变量代有初始值存放在初始化数据段中。
  3  非初始化数据段:通常将此段称为bss段(block started by symbol)。在程序开始执行之前,内核将此段中的数据初始化为0或者空指针。出现在任何函数外的C 声明: long sum[100]; 使此变量存放在非初始化数据段中。
  4  栈:自动变量以及每次函数调用时所保存的信息都存放在此段中。然后,最近调用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,可以递归调用C 函数。递归函数每次调用自身时,就是用一个新的栈针,因此一个函数调用实例中的变量不会影响另一个函数调用实例的变量。
  5  堆:通常在堆中进行动态存储分配。由于历史上形成的惯例,堆位于非初始化数据段和栈之间。
当然,程序还有别的类型的段,例如,包含符号表的段、包含调试信息的段以及包含动态共享库链接表的段等等。这些段并不装载到进程执行的程序影像中。
来自:UNIX 环境高级编程 第2版


相关文档:

C/C++

9.2  共用体
C语言除了提供结构体这种可包含多种类型数据的构造类型外,还提供了一种从形式上看和结构体堪称“孪生兄弟”的构造类型——共用体(union)。
本节从共用体的概念入手,从共用体的概念、与结构体的异同、使用等方面进行详细的介绍。
9.2.1  什么是共用体
现实生活中,某些事 ......

c默认是传值的

在c中,参数默认是传值的,即在参数入栈时被复制一份
。在函数里面修改这些参数,不会影响外面的调用者。
例如
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void get_str(char * p)
{
    p = (char *)malloc(sizeof("abcd"));
    s ......

simply web server by unix c program

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/wait.h>
#define QLEN 20
# ......

C输出格式总结

C输出格式总结
2007-07-08 12:09
1 一般格式
   printf(格式控制,输出表列)
   例如:printf("i=%d,ch=%c\n",i,ch);
   说明:
   (1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:
    &nbs ......

c陷阱与缺陷阅读笔记

【1】 “ = ”的优先级低于  “ || ” 且 “ = ” 为右结合性,注意一下代码为死循环:while(c=' '||c=='\t'||c=='\n')

程序本意是跳过空格,制表符,换行符,但由于不小心将c=='  '写成了c= '  '导致程序进入死循环
【2】a=-1 在很老的C版本里理解为 a =-  1
【3 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号