我不想让你做我的作业。我只是想要一些关于如何做到这一点的提示,以便我自己学习。
给定的是一个字节寻址的存储器,它从最低地址写入最高地址。然后我有一个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个字节,short是2个字节,float是4个字节。如何将这些声明最有可能保存在内存中?以十六进制数字填写以下内容。
我如何从这里开始?你能给我一些提示吗?我要做的第一件事是什么?
编辑:我的朋友告诉我系统是IA32。
答案 0 :(得分:3)
只想了解如何做到这一点,以便我自己学习。
作为上述步骤2和3的替代方法,您可以使用以下方式打印出地址:
printf("myvar's address=%p", (void*) &myvar);
答案 1 :(得分:2)
我假设您的变量被声明并定义为本地(非静态/全局)变量,例如:
int main()
{
long int i = 1;
char c = 'x';
short int n = 10;
short in m = 11;
float f = 0.0;
}
如果是,则将它们分配到堆栈中。
在堆栈上分配局部变量的原则对于所有系统大致相同:
char
为1,short
为2,等等)原则(2)和(4)之间存在冲突 - 如果重新排列变量可以节省空间,编译器会这样做吗?我想你可以假设没有(这是你问题中“最有可能”的部分)。
真实情况比这复杂得多(sizeof
并未真正由上述数字规定;对齐要求并不总是等于sizeof
;编译器可能会为两个不同的变量重用空间;等等) - 但如果你想在合理的时间内解决你的家庭作业,你必须简化它。