ULK第20章有个例子,关于程序的内存布局的,例子如下:[code]#include
by sygspjlsj - 内核源码 - 2012-06-17 16:00:31 阅读(3251) 回复(11)
教您布局C语言编程程序的内存 重点关注以下内容: C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。...
C语言程序的内存布局
一:C语言程序的存储区域
C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域:
1.代码段(Code or Text):
字符串常量存储位置: http://www.9php.com/FAQ/cxsjl/c/2008/03/5313767114032.html 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87606/showart_2087397.html
最高地址部分用于存放环境变量和主函数的入参 .data包含静态的和全局的已初始化的数据, .bss包含静态的和全局的未初始化的数据。 .text段包含程序指令和和很多只读数据。 tack 包含局部的非静态的已初始化和未初始化的变量 heap 用于非配内存空间给malloc之类的函数 +-------------------+ high address | env strings | +-------------------+ | argv strings | +-------------------+ | env pointe...
[code]class A { A(); int x; c( char ); }; class B :public A { B(); int y; d( char ); }; main() { int i; B b =new B; } ========== 代码段 class A class B main ========== 栈 int i 指针b (new B) ========== 堆 class B { class A { int x (堆里的第1个位置) c(这里是一个指针指向代码段A的c函数地址...
小弟现在对继承的问题有些疑惑,当子类继承父类后,子类对象的内存布局是什么样子的呢?有图最好 以c++来说子类对象先是父类的内存拷贝,然后是自己的扩展部分?其中内存中保存的主要是变量吧 函数属于类 对象中只有函数地址,对于虚函数的的函数表又是怎么保存呢? 另外如果在父类和子类中都有this指针的话他们是不是都是指向子类的对象? 对于以上问题不是很清楚,求大侠给出系统解释 ,小弟在此谢过
Redis zipmap内存布局分析 本文转自《淘宝核心系统团队博客》,作者为@淘宝千石,文章对Redis的zipmap内部结构进行了分析,主要包括了其内存使用及几个常用API的操作流程。 Redis被称为key/value应用中的瑞士军刀,除了其丰富的数据结构支持,更重要的是高效的内存使用,分析源码可以发现作者使用每一个byte都精打细算。在hashtable实现中,Redis引入了zipmap数据结构,保证在hashtable刚创建以及元素较少时,用更少的内存...
如下代码: [code] class A { public: int a; char x; }; class B : public A { public: char y; }; class C : public B { public: char z; }; int main() { cout << sizeof(A) << sizeof(B) << sizeof(C) << endl; return 0; } [/code] 我测试了一下,32位机上,结果为 8,12,12. 肯定涉及到内存对齐的问题。但为什么B和C对象的大小是一样的呢?从内存上来看,这三者对象的数据成员是怎放置的?...
在学习缓冲区溢出的过程当中逐渐对内存布局产生了兴趣,总想对详细的内存布 局一探究竟,期间参考了很多资料,比如《深入理解计算机系统》、《UNIX环境 高级编程》,但是这些仍然是概念层面的,自己照着这些资料摸索,知道了一 些,但是还有太多的东西搞不清楚。 请推荐一些这方面的详细资料。 (貌似内核源代码能提供详细一些,但是我现在的水平还啃不动) 下面是我自己知道的一些东西:(gdb的输出中方括号所在行是我标记的) ...