数组
1. 数组长度分配
int main()
{
// 不加这一行 00401013 sub esp,40h
// 加这一行 00401013 sub esp,68h
// 默认是40(64字节), 68 - 40 = 28(40字节),1个int是4个字节, 10 * 4 = 40
int ageArr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 0040D408 mov dword ptr [ebp-28h],1
// 0040D40F mov dword ptr [ebp-24h],2
// 0040D416 mov dword ptr [ebp-20h],3
// 0040D41D mov dword ptr [ebp-1Ch],4
// 0040D424 mov dword ptr [ebp-18h],5
// 0040D42B mov dword ptr [ebp-14h],6
// 0040D432 mov dword ptr [ebp-10h],7
// 0040D439 mov dword ptr [ebp-0Ch],8
// 0040D440 mov dword ptr [ebp-8],9
// 0040D447 mov dword ptr [ebp-4],0Ah
// 4C - 40 = C = 12, 本来需要10个字节,给了12个,因为是4的整数倍
char ageArr[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g'};
// 0040D3F9 lea edi,[ebp-4Ch]
// 0040D3FC mov ecx,13h
// 0040D401 mov eax,0CCCCCCCCh
// 0040D406 rep stos dword ptr [edi]
// 5: char ageArr[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g'};
// 0040D408 mov byte ptr [ebp-0Ch],61h
// 0040D40C mov byte ptr [ebp-0Bh],62h
// 0040D410 mov byte ptr [ebp-0Ah],63h
// 0040D414 mov byte ptr [ebp-9],64h
// 0040D418 mov byte ptr [ebp-8],65h
// 0040D41C mov byte ptr [ebp-7],66h
// 0040D420 mov byte ptr [ebp-6],67h
// 0040D424 mov byte ptr [ebp-5],68h
// 0040D428 mov byte ptr [ebp-4],69h
// 0040D42C mov byte ptr [ebp-3],67h
// 同理 short ageArr 长度是 20 字节
return 0;
}
2. 多维数组
#include <stdio.h>
int main()
{
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6},
};
return 0;
}
// 58 - 40 = 18 = 24 字节 = 4 * 6, 顺序排列,连续存储,没有多维的概念,只是为了方便人使用
// 0040D3F9 lea edi,[ebp-58h]
// 0040D3FC mov ecx,16h
// 0040D401 mov eax,0CCCCCCCCh
// 0040D406 rep stos dword ptr [edi]
// 5: int arr[2][3] = {
// 6: {1, 2, 3},
// 0040D408 mov dword ptr [ebp-18h],1
// 0040D40F mov dword ptr [ebp-14h],2
// 0040D416 mov dword ptr [ebp-10h],3
// 7: {4, 5, 6},
// 0040D41D mov dword ptr [ebp-0Ch],4
// 0040D424 mov dword ptr [ebp-8],5
// 0040D42B mov dword ptr [ebp-4],6
// 8: };