本机尺寸概念 c int char 类型堆栈内到底是怎么分配的!

mmbkzqll 2016-06-04 03:32:43

求解释
1.为什么图中的寄存器是那样的
2.跟本机尺寸概念有关系吗
3.到底给int和char类型分配了多大内存呢!
(附:我的pc为64为w7系统)
...全文
931 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2016-06-06
  • 打赏
  • 举报
回复
char int 什么的,只与编译器有关。
mmbkzqll 2016-06-05
  • 打赏
  • 举报
回复
引用 11 楼 qq_29120981 的回复:
编译器优化结果,在codeblocks里面没有这问题
.好吧我钻牛角了!其实我是在实验而已,但是电脑给出了这个东西,按照正常位数64应该是2行cccccccc,下面一行上面一行,写东西应该是写在上层的int3哪里,还有之前说的字节,我记错了,一字节是8位,01占用是8位,我还以为一个就是8位了!算糊涂了!
醉花阴柳 2016-06-05
  • 打赏
  • 举报
回复
编译器优化结果,在codeblocks里面没有这问题
醉花阴柳 2016-06-05
  • 打赏
  • 举报
回复
引用 7 楼 mmbkzqll 的回复:
[quote=引用 4 楼 qq_29120981 的回复:] [quote=引用 3 楼 mmbkzqll 的回复:] 我的问题是内存里的cccccccc不对称所以我晕了,从图看01显然是分配了2个字节既然是2个字节,为什么02会跟01中间相差2组cccccccc,在64位计算机中是2组cccccccc,也就是64位一组的吗?如果是为什么会出现中间差2组cccccccc呢,挨着01 2组后边写00000002不就行了吗!
01是一个字节,因为内存对齐所以不会紧邻着[/quote]01是2个字节的,0和1各占一个,你错了!![/quote] 16进制显示一个数字对于4个二进制位,01对应8个二进制位即一字节
醉花阴柳 2016-06-04
  • 打赏
  • 举报
回复
1.哪个寄存器,怎么样了? 2.不知道你想问什么 3.int分配了dword双字,char分配了byte字节
lm_whales 2016-06-04
  • 打赏
  • 举报
回复
另外,会不是你找错地方了?这里并不是变量的内存所在? 输出一下地址看看咋回事
lm_whales 2016-06-04
  • 打赏
  • 举报
回复
1只占用一个字节,这里采用的不是最低字节 而是占用了高字节,安排确实有点诡异 然而其他方面都很正常 前后四个字节都加上 0xcccccccc 两个变量处理方式相同 这难道是为了占用最高字节?
mmbkzqll 2016-06-04
  • 打赏
  • 举报
回复
引用 4 楼 qq_29120981 的回复:
[quote=引用 3 楼 mmbkzqll 的回复:] 我的问题是内存里的cccccccc不对称所以我晕了,从图看01显然是分配了2个字节既然是2个字节,为什么02会跟01中间相差2组cccccccc,在64位计算机中是2组cccccccc,也就是64位一组的吗?如果是为什么会出现中间差2组cccccccc呢,挨着01 2组后边写00000002不就行了吗!
01是一个字节,因为内存对齐所以不会紧邻着[/quote]01是2个字节的,0和1各占一个,你错了!!
mmbkzqll 2016-06-04
  • 打赏
  • 举报
回复
引用 5 楼 lm_whales 的回复:
cccccccc 是单步中断int 3的的指令码 是VC调试的时候设置的屏障,防止指针越界操作用的
。这个我知道!!!
lm_whales 2016-06-04
  • 打赏
  • 举报
回复
x64 版: int 4 int * 8 long 4 long long 8 char: 1(4),char [4]: 4(4=1*4) short: 2(4) short[2]: 4(4=2*4) x86 版 int 4,long 4.int *4,long long 8 char :1(4),char [4]: 4(4=1*4) short :2(4) short[2] :4(4=2*4) 大约如此: char 1字节 对齐4字节,所以占有4字节 对齐和设置有关,是可变的
lm_whales 2016-06-04
  • 打赏
  • 举报
回复
cccccccc 是单步中断int 3的的指令码 是VC调试的时候设置的屏障,防止指针越界操作用的
醉花阴柳 2016-06-04
  • 打赏
  • 举报
回复
引用 3 楼 mmbkzqll 的回复:
我的问题是内存里的cccccccc不对称所以我晕了,从图看01显然是分配了2个字节既然是2个字节,为什么02会跟01中间相差2组cccccccc,在64位计算机中是2组cccccccc,也就是64位一组的吗?如果是为什么会出现中间差2组cccccccc呢,挨着01 2组后边写00000002不就行了吗!
01是一个字节,因为内存对齐所以不会紧邻着
mmbkzqll 2016-06-04
  • 打赏
  • 举报
回复
我的问题是内存里的cccccccc不对称所以我晕了,从图看01显然是分配了2个字节既然是2个字节,为什么02会跟01中间相差2组cccccccc,在64位计算机中是2组cccccccc,也就是64位一组的吗?如果是为什么会出现中间差2组cccccccc呢,挨着01 2组后边写00000002不就行了吗!

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧