C中地址分配的查询
Query on Address allocation in C
你能帮我理解这个基本项目吗:
我有两个变量 i 和 J,我的查询是我已经初始化了“I”,后来又初始化了“J”,但是第一个地址分配给了 J 而不是“I”。
你能帮我理解为什么吗?
I 比 J 高 4 位的地址
#include<stdio.h>
int main()
{
int i;
printf("%d",sizeof(int));
printf("enter the number to multiply wuth 1 through 10:");
scanf("%d",&i);
printf("size of I:%d\n",sizeof(i));
for(int j=0;j<=10;j++){
printf("%d\n",i*j);
printf("Address of j:%d\n",&j);
}
printf("%d",&i);
return 0;
}
编译器使用他们自己的算法来决定如何在变量之间分配内存,基于许多因素,如对齐和缓存行使用。不能保证它们在内存中的排列顺序与其声明的顺序相同,也没有任何特定理由可以预期会出现这种情况。 (而且除非你取变量的地址,否则可能会被优化成一个完全不占内存的寄存器。)
它完全依赖于编译器。由于所有这些变量都存储在 Stack 中,我们无法决定将哪个地址提供给哪个变量。
多次尝试运行相同的代码,您可能会发现I的地址分配在j之前。
谢谢
你能帮我理解这个基本项目吗:
我有两个变量 i 和 J,我的查询是我已经初始化了“I”,后来又初始化了“J”,但是第一个地址分配给了 J 而不是“I”。
你能帮我理解为什么吗?
I 比 J 高 4 位的地址
#include<stdio.h>
int main()
{
int i;
printf("%d",sizeof(int));
printf("enter the number to multiply wuth 1 through 10:");
scanf("%d",&i);
printf("size of I:%d\n",sizeof(i));
for(int j=0;j<=10;j++){
printf("%d\n",i*j);
printf("Address of j:%d\n",&j);
}
printf("%d",&i);
return 0;
}
编译器使用他们自己的算法来决定如何在变量之间分配内存,基于许多因素,如对齐和缓存行使用。不能保证它们在内存中的排列顺序与其声明的顺序相同,也没有任何特定理由可以预期会出现这种情况。 (而且除非你取变量的地址,否则可能会被优化成一个完全不占内存的寄存器。)
它完全依赖于编译器。由于所有这些变量都存储在 Stack 中,我们无法决定将哪个地址提供给哪个变量。 多次尝试运行相同的代码,您可能会发现I的地址分配在j之前。
谢谢