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

典型的C程序存储空间布局

一个典型的C程序存储空间布局由以下几个部分组成:
    正文段:CPU执行的指令部分,也就是主要的程序代码编译出来的结果,只读,通常可以共享。
    初始化数据段:通常称之为数据段,包含了程序中需要明确赋值的变量,譬如一些初始化的全局变量等,如 int a = 10,变量名和值都存放在这个段中。
    未初始化数据段:通常称之为BSS(Block Started by Symbol)段,包含了程序中没有进行赋值的变量,譬如一些未初始化的全局变量,如 int a,在程序执行之前,内核会把这部分全部置为0(NULL),
    栈:自动变量以及每次函数调用时所需保存的信息放在此段中。如函数调用时要保存返回地址等。栈是从上向下分配的。
    堆:通常在堆中进行动态存储分配,如malloc, calloc, realloc等都从这里面分配。堆是从下向上分配的。
    通常堆顶和栈底之间的虚拟地址空间是很大的。
    对X86处理器上的Linux,正文段从0x08048000开始,栈底则从0xC0000000之下开始。
    下图是一个典型的C程序存储空间的逻辑布局:
 
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}


相关文档:

C指针深入与内存泄漏

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。   要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的   类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。  
  先声明几个指针放着做例子:   ......

ACE+gSOAP实现高性能WebService Server(C/C++)

1、开发环境请参考《搭建ACE-5.7.4+VS2008开发环境》一文
2、gSOAP库,下载地址:http://gsoap2.sourceforge.net/,本文使用的版本是:gsoap_2.7.15,gSOAP的编程可以参考doc目录下的soapdoc2.pdf,官方文档写的非常详细。
让我们开始gSOAP编码旅程:
1、创建gsoap_server.h:
//gsoap ns2 service namespace: http://l ......

c程序设计语言官方题解版勘误1

#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN  1
#define OUT  0
//打印输入中单词长度的水平方向直方图,
void main()
{
 int c, i, nc, state;
 int len;     //length of each bar
 int maxvalue;  &n ......

c函数的参数传递

在C语言中,所有传递给函数的参数都是按值传递的。
#include <iostream>
using namespace std;
void Out(int* p)
{
    int j = 11;
    p = &j;
    *p = 12;
    cout<<*p<<endl;
}
int main(int argc,char*argv[])
{
&n ......

汇编看c之一,简单函数调用

简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下
1.栈到底是什么,如何操纵栈的?
2.参数和临时变量是以什么形式在哪存放?
3.如何传递返回值?
举例:
#include <stdio.h>
int add(int a,int b)
{
     int c=0;
     c=a+b;
     ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号