标题:TonyDeng版主帮帮忙呗。。。。。我真的走火入魔了。。。。
只看楼主
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
得分:0 
以下是引用TonyDeng在2013-2-22 13:09:12的发言:

现在你明白为什么不需要深究这些东西了吗?
谢谢你了,不深追究了。
2013-02-22 13:42
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
得分:2 
学习
2013-02-22 15:29
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
得分:2 
学习汇编语言  这部分内容 自然明了。。。不学汇编  很难理解的。。。PE  ELF   a.out...

自由、民主、宪政!
2013-02-22 16:23
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
得分:0 


  int a = 0; //全局初始化区,.data段
static int b=20; //全局初始化区,.data段
char *p1; //全局未初始化区 .bss段
const int A = 10; //.rodata段 
main()
{
     int b; //栈
     char s[] = "abc"; //栈
     char *p2; //栈
     static int c = 0; //全局(静态)初始化区 .data段
     char *p3 = "123456"; //123456\0在常量区,p3在栈上。
     p1 = (char*) malloc(10);//分配得来的10和20个字节的区域就在堆区
     p2 = (char*) malloc(20);
    strcpy(p1, "123456"); //123456\0 在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方
}
一个进程运行时,所占用的内存,可以分为如下几个部分:1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的另一块区域。程序结束后由系统自动释放。4、文字常量:常量字符串就是存放在这里的,程序结束后由系统释放。5、程序代码:存放函数体的二进制代码。
收到的鲜花
  • suishuhao2013-02-22 16:35 送鲜花  3朵   附言:好文章

自由、民主、宪政!
2013-02-22 16:31
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
得分:0 
我在百度上问了问,得到如下答复:
1、是,obj文件里面有段信息2、没有,堆是运行的时候由运行库给你分配的(windows下vc运行库其实用的是系统提供的堆),栈式运行的时候系统给你分配的,编译后的obj里面甚至连栈段有多大这样的信息都没有(这是链接的时候加上去的)全局变量的逻辑地址是不变的这说法在没开启动态基地址的时候是正确的,每次exe加载到内存中以后,同一个全局变量都在同一个位置。不过windows下开启动态基地址之后每次exe都可能被加载到不同的地址上,这个时候全局变量的内存地址就会变化了。
2013-02-22 16:33
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
得分:0 
以下是引用lwb603569640在2013-2-22 16:31:36的发言:



  int a = 0; //全局初始化区,.data段
static int b=20; //全局初始化区,.data段
char *p1; //全局未初始化区 .bss段
const int A = 10; //.rodata段 
main()
{
     int b; //栈
     char s[] = "abc"; //栈
     char *p2; //栈
     static int c = 0; //全局(静态)初始化区 .data段
     char *p3 = "123456"; //123456\0在常量区,p3在栈上。
     p1 = (char*) malloc(10);//分配得来的10和20个字节的区域就在堆区
     p2 = (char*) malloc(20);
    strcpy(p1, "123456"); //123456\0 在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方
}
一个进程运行时,所占用的内存,可以分为如下几个部分:1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的另一块区域。程序结束后由系统自动释放。4、文字常量:常量字符串就是存放在这里的,程序结束后由系统释放。5、程序代码:存放函数体的二进制代码。



这是程序被加载到内存的结构,顺便  你要知道 链接器和加载器  他们会根据比如PE . ELF这种数据结构来处理

自由、民主、宪政!
2013-02-22 16:36
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
得分:0 
回复 15楼 suishuhao
堆是一种结构  动态的存在于内存。。

自由、民主、宪政!
2013-02-22 16:43
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
得分:0 
推荐一本书  

http://ishare.iask.

自由、民主、宪政!
2013-02-22 16:49
suishuhao
Rank: 2
等 级:论坛游民
帖 子:89
专家分:10
注 册:2012-9-25
得分:0 
以下是引用lwb603569640在2013-2-22 16:49:09的发言:

推荐一本书   
 
http://ishare.iask.
谢谢!看看~
2013-02-22 16:55
洫魇
Rank: 2
等 级:论坛游民
帖 子:46
专家分:34
注 册:2013-2-5
得分:2 
......

一切,都在输给时间.
2013-02-23 17:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-398951-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051230 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved