易截截图软件、单文件、免安装、纯绿色、仅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版


相关文档:

LINUX下进行C语言编程

源程序编译  

Makefile的编写  

程序库的链接  

程序的调试  

头文件和系统求助  


1.源程序的编译  

在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器.   下面我们以一个实例来说明如何使用gcc编译器.  
......

C函数指针总结

本文仅限于C,主要自己老忘。别的废话少说。
1.Basic
首先考虑函数在函数体内的定义,如下: 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
 int add(int,int); 
 int def(int, int);
 printf("%d\n", add(1,3));
 printf("%d\n", def(3,1));
  ......

C中的空


1.   什么是空指针常量(null pointer constant)?
[ 6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
这里告诉我们:0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 ......

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陷阱与缺陷阅读笔记

【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号