提出问题:
- 为什么数组的第一个元素的索引要从0开始?
- 多个局部变量的内存顺序是自下而上,还是自下而上分配的呢?
- 为什么编译器要分配12个4字节的内存呢?
猜测1: 用违背常规的方法换来了计算速度
猜测2:跟实参的入栈方式一样,先声明的在上面
第i个元素的地址 = 首地址a + (i-1)×元素大小 第i个元素的地址 = 首地址a + i×元素大小
实证1:
C++代码
int main()
{
int arr[10]{0};
for (int i = 0; i < 10; i++) {
arr[i] = i;
}
}
汇编代码
003C1048 8B 55 D0 mov edx,dword ptr [ebp-30h] 003C104B 8B 45 D0 mov eax,dword ptr [ebp-30h] 003C104E 89 44 95 D4 mov dword ptr [ebp+edx*4-2Ch],eax实证2:先声明的先压栈,猜测2是错的 发现规律
- C语言的数组在全局区,栈上都会分配连续的内存空间;而且索引从零开始;
- 局部变量的内存布局是先声明的先压栈,这个需要日后再去深入修改验证;



