| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1089 人关注过本帖
标题:内存分配问题
只看楼主 加入收藏
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
楼上解释的多六个字节,在我的机器上其实是不对的,应该是多八个字节,这是因为会为char d[] = "12345" , 分配八个字节的内存空间,这是从cpu访问内存中的数据的角度来考虑的!现在cpu的数据总线宽度是32位,也就是每次访问内存中的数据都是四个字节大小的,而对访问地址也是有要求的,对于X86的cpu来说,访问地址必须是4的倍数,也就是只能够访问0x00 , 0x04 , 0x08 ........这些特殊的地址,而对于地址非4的倍数的地址有的cpu会抛出一个异常,而有的cpu却能够访问,但是需要两个时钟周期。

[ 本帖最后由 我菜119 于 2010-12-18 15:16 编辑 ]

愿用余生致力编程
2010-12-18 15:15
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用我菜119在2010-12-18 15:15:37的发言:

楼上解释的多六个字节,在我的机器上其实是不对的,应该是多八个字节,这是因为会为char d[] = "12345" , 分配八个字节的内存空间,这是从cpu访问内存中的数据的角度来考虑的!现在cpu的数据总线宽度是32位,也就是每次访问内存中的数据都是四个字节大小的,而对访问地址也是有要求的,对于X86的cpu来说,访问地址必须是4的倍数,也就是只能够访问0x00 , 0x04 , 0x08 ........这些特殊的地址,而对于地址非4的倍数的地址有的cpu会抛出一个异常,而有的cpu却能够访问,但是需要两个时钟周期。



这是因为会为char d[] = "12345" , 分配八个字节的内存空间


你们家自己做的cpu跟内存?
2010-12-18 15:17
无尽苍穹
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:101
注 册:2007-3-28
收藏
得分:0 
当调用函数时 那么会给该函数在栈上初始化一段内存 用以保存该函数的内部变量
栈指针是esp  所以首先会给s,d分配内存(栈中) 分配内存则esp减少
先分配s  这时esp减少几字节 再分配d  esp再减少字节

呵呵 内嵌汇编时 经常人为的让esp减少字节 而分配自定义的局部变量空间
不过对于变量在栈中分配的字节问题是与CPU有关 比如32位CPU在调用push pop时是以4字节对齐的
2010-12-18 15:30
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用无尽苍穹在2010-12-18 15:30:39的发言:

当调用函数时 那么会给该函数在栈上初始化一段内存 用以保存该函数的内部变量
栈指针是esp  所以首先会给s,d分配内存(栈中) 分配内存则esp减少
先分配s  这时esp减少几字节 再分配d  esp再减少字节

呵呵 内嵌汇编时 经常人为的让esp减少字节 而分配自定义的局部变量空间
不过对于变量在栈中分配的字节问题是与CPU有关 比如32位CPU在调用push pop时是以4字节对齐的



一敲不通, 你知道这段代码的汇编到底是怎么实现的吗?

你以为真的去调用push pop?
2010-12-18 15:32
无尽苍穹
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:101
注 册:2007-3-28
收藏
得分:0 
呵呵 我又没说是将"123""12345"这个字符串push pop 也没说s d是push pop
我的意思只是push 和pop一次的字节与CPU有关
2010-12-18 15:38
无尽苍穹
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:101
注 册:2007-3-28
收藏
得分:0 
至于是怎么实现的 呵呵就是 常量的地址保存在s和d中
通过 mov eax,dwod ptr(常量地址)
    mov s或d,eax
2010-12-18 15:41
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 12楼 Devil_W
哈哈!你说是那就是吧!!!嘎嘎!

愿用余生致力编程
2010-12-18 15:42
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用我菜119在2010-12-18 15:42:41的发言:

哈哈!你说是那就是吧!!!嘎嘎!



以后不懂的时候,就别瞎说。
2010-12-18 15:49
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用Devil_W在2010-12-18 15:49:46的发言:




以后不懂的时候,就别瞎说。

而你懂又不说。那岂不是没人说了
2010-12-18 15:54
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用遮天云在2010-12-18 15:54:44的发言:


而你懂又不说。那岂不是没人说了


我是没说,

但是我现在相信 "我菜119" 已经懂了为什么空间分配是那样子的了。

就从我刚才发的那个帖子的回复。至少他会动手debug.

[ 本帖最后由 Devil_W 于 2010-12-18 15:59 编辑 ]
2010-12-18 15:57
快速回复:内存分配问题
数据加载中...
 
   



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

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