| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 977 人关注过本帖
标题:有关C语言内存分配问题
只看楼主 加入收藏
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
看来还是没能解决我的疑问,按楼上讲,如果说栈的内存分配与CPU有关,那为什么TC与VC++正好相反,我觉得应该是和编译器有关的.....一个多字节变量高位字节占据高内存才是与CPU有关,关于这点TC和VC++都一样.......我要知道的就是为什么在定义变量时在VC++中为什么是先定义的占据高内存,而TC恰好相反
2010-08-16 13:08
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
以下是引用yuanfeng1129在2010-8-16 13:08:42的发言:

看来还是没能解决我的疑问,按楼上讲,如果说栈的内存分配与CPU有关,那为什么TC与VC++正好相反,我觉得应该是和编译器有关的.....一个多字节变量高位字节占据高内存才是与CPU有关,关于这点TC和VC++都一样.......我要知道的就是为什么在定义变量时在VC++中为什么是先定义的占据高内存,而TC恰好相反
程序代码:
int a = 12;
int b = 29;
long la = 123456;
long lb = 987654;
char ca = 'Q';
char cb = 'B';
好吧,也怪我没说清楚
让我们先看TC对上面代码编译后生成的汇编代码
_main    proc    near
    push    bp      ; bp入栈
    mov    bp,sp    ; bp保存sp的值
    sub    sp,14    ; 将栈顶下移14个字节,用来存储局部变量。(栈是自顶而下的)
;    ?debug    L 5
    mov    word ptr [bp-14],12     ; 保存变量a,从这些语句应该可以看出来tc的局部变量的地址为啥由小变大了吧?
;    ?debug    L 6
    mov    word ptr [bp-12],29     ; 保存变量b
;    ?debug    L 7
    mov    word ptr [bp-8],1       ; 保存
    mov    word ptr [bp-10],-7616  ; 变量la
;    ?debug    L 8
    mov    word ptr [bp-4],15      ; 保存
    mov    word ptr [bp-6],4614    ; 变量lb
;    ?debug    L 9
    mov    byte ptr [bp-2],81      ; 保存变量ca
;    ?debug    L 10
    mov    byte ptr [bp-1],66      ; 保存变量cb
;    ?debug    L 12
OK,再来看vc生成的汇编代码
    push    ebp
    mov    ebp, esp
    sub    esp, 24                    ; 00000018H   ; 同TC一样,操作栈顶,为局部变量开辟存储空间(栈是自顶而下的)

; 5    :     int a = 12;

    mov    DWORD PTR _a$[ebp], 12            ; 0000000cH   ; 同tc一样,保存局部变量,从这些语句中知道为什么VC的局部标量地址由大变小了吧?

; 6    :     int b = 29;

    mov    DWORD PTR _b$[ebp], 29            ; 0000001dH

; 7    :     long la = 123456;

    mov    DWORD PTR _la$[ebp], 123456        ; 0001e240H

; 8    :     long lb = 987654;

    mov    DWORD PTR _lb$[ebp], 987654        ; 000f1206H

; 9    :     char ca = 'Q';

    mov    BYTE PTR _ca$[ebp], 81            ; 00000051H

; 10   :     char cb = 'B';

    mov    BYTE PTR _cb$[ebp], 66            ; 00000042H



[ 本帖最后由 succubus 于 2010-8-16 14:01 编辑 ]

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-16 13:58
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
如果看不懂上面的汇编代码
请自行找资料学习即可。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-16 13:59
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
为了解答你的疑惑
我特意去下了个tc2.0
希望这个解答能对你有帮助。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-16 14:00
快速回复:有关C语言内存分配问题
数据加载中...
 
   



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

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