c/c++堆栈分布及其设置方法

2016-02-19 11:25 10 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享c/c++堆栈分布及其设置方法,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - 编程语言 】

一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。其操作方式类似于数据结构中的栈。
2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4、文字常量区—常量字符串就是放在这里的,程序结束后由系统释放 。
5、程序代码区— 存放函数体的二进制代码。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

代码如下:

int a = 0;//全局初始化区
char*p1;//全局未初始化区
main()
{
    intb;//栈
    chars[] = "abc";//栈
    char*p2;//栈
    char*p3 = "123456";//123456在常量区,p3在栈上。
    static int c =0;//全局(静态)初始化区
    p1 = (char*)malloc(10);
    p2 = (char*)malloc(20);//分配得来的10和20字节的区域就在堆区。
}

strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3所指向的”123456"优化成一个地方。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1597467.html

延伸阅读
下面的是学C++时要注重的。 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他...
Stephan Lavavej提出了一个非常有趣也很尖锐的问题:“C++的未来在哪里?” 这个问题是有解的。没有哪个语言会成为永恒,不是吗?(尽管C语言现在依旧生气勃勃)我不希望C++在2017年,或者甚至在2057年也依然那么有活力。在计算机行业,50年已经是一个几乎不可思议的时间了;虽然到今年为止,晶体管已有60年的历史。所以,在我问“C++的未来在哪...
    富有活力的语言需要不断改变和成长,C++也不例外。在本文中,Bjarne Stroustrup提出了自己对C++的设计和演化的看法。 !-- frame contents -- !-- /frame contents -- 为了让编译器、工具和类库实现者跟上节奏,让用户吸收标准C++所支持的编程技术,在早有预计的、沉寂了几年之后,委员会再次考虑...
在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选做法。 确定浮点型变量和表达式是 float 型 为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码),必须确定浮点型变量和表达式是 float 型的。要非凡注重的是,以 ";F"; 或 ";f"; 为后缀(比如:3.14f)的浮点常量才是 float 型,...
标签: 计算机语言
要点1: 很多C++程序员还在使用而不是用更新的标准的库。这两者都有什么不同呢?首先,5年前我们就开始反对把.h符号继续用在标准的头文件中。继续使用过时的规则可不是个好的方法。从功能性的角度来讲,包含了一系列模板化的I/O类,相反地只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,和在接...

经验教程

463

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部