我不想让你做我的功课。我只想提供一些关于如何做的提示,以便我可以自己学习。字节寻址内存(数据对齐)
给定的是一个从最低位到最高位写入的字节地址内存。然后,我有它具有以下声明一个C程序:
long int i = 1;
char c = 'x';
short int n = 10;
short in m = 11;
float f = 0.0;
在IA32 int是4个字节,char是1个字节,短是2字节,并且浮子是4字节。这些声明如何最有可能被保存在记忆中?用十六进制数字填写以下内容。
如何从这里开始?你能给我一些提示吗?我必须做的第一件事是什么?
编辑:我的教训告诉我,系统是IA32。
C标准甚至不需要使用堆栈。堆栈并不一定会下降。这个问题甚至没有提到它会是一个堆栈3)是错误的。除了现有体系结构中的'char'类型(只定义了'char')之外,还有更大更小的对齐方式。编译器必须**不**重新排序结构字段,局部变量可以很容易地保存在寄存器中,全局变量也有一些限制,等等。 – Olaf
我同意这一点。这就是为什么我在我的答案中写下最后一段。你提供的所有信息都是真实的,我可以把它放在那里,但你真的不想在OP上抛出几个数兆字节的ABI手册来回答一个简单的问题,对吧?国际海事组织最后一句简短的“它很复杂”的免责声明已经足够了,我已经用三种方式让它变得复杂起来。 – anatolyg
OP必须提供一个特定的布局,所以他**需要一个特定的ABI(它们不是**,实际上对C来说很大或很复杂)。然而,你的ciams并不成立,但是,你从没有解释的先决条件开始,但是如果是atate,虽然它们不是(例如:OP状态是哪些地方变量?它们使用堆栈,堆栈正在下降。 ..)。只是“这很复杂”是不够的。有时候没有答案比错过答案更好。在这方面,对这个问题的评论比你的回答更有帮助。 – Olaf