一个反编译问题

zll_lover 2010-09-16 04:58:38
13: const int len = 10;
00401098 mov dword ptr [ebp-4],0Ah
14: char op='c';
0040109F mov byte ptr [ebp-8],63h
15: char ty='d';
004010A3 mov byte ptr [ebp-0Ch],64h
在c里面是连续声明的,为什么反编译后内存不是连续起来的呢?
谢谢
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zll_lover 2010-09-17
  • 打赏
  • 举报
回复
请问楼上字节对齐我看明白了可是都是针对struct的文章,
貌似在函数里和字节对齐概念不是一回事吧?谢谢帮忙解释下
int a=6;
char b='c';
short c=6;

char b='c';
int a=6;
short c=6;
放在函数里是一样的,但放入struct里是不一样的
kostion 2010-09-17
  • 打赏
  • 举报
回复
操作系统字节对齐的概念,搜一下字节对齐就知道了
job82824 2010-09-17
  • 打赏
  • 举报
回复
char应该是1个字节。C语言中的int才是两个字节的。
连续声明并不表示变量的地址就连续,在C/C++中也一样,这个变量地址如何分配是编译器来控制的,你只要记得在堆(动态的)和栈(静态的)上分配就行了。
如果希望所有的变量地址连续,不妨采用数组方式
usigned char *myCache = malloc(_MY_SIZE);
if(myCache)
{
int *myINT = myCache[0];
char *myChar1 = myCache[2];
char *myChar2 = myCache[3];
...
}
熊熊大叔 2010-09-17
  • 打赏
  • 举报
回复
在结构里(假设是缺省的4字节对齐)
则1字节的变量,可以存在任何位置
2字节的变量,必须在偶数地址开始,
4字节的变量,必须在能被4整除的地址开始。
不满足条件的就需要补齐

在函数里,所有局部变量都必须在能被4整除的地址开始。
zll_lover 2010-09-17
  • 打赏
  • 举报
回复
再顶顶等高手回答
  • 打赏
  • 举报
回复
就是这样!
[Quote=引用 1 楼 truelance 的回复:]
是连续的,每个局部变量占用的内存都必须是4字节的整数倍。
即使是char类型,也要占用4字节(当然有3字节是无用的,仅为提高读取效率)
[/Quote]
熊熊大叔 2010-09-16
  • 打赏
  • 举报
回复
是连续的,每个局部变量占用的内存都必须是4字节的整数倍。
即使是char类型,也要占用4字节(当然有3字节是无用的,仅为提高读取效率)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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