结构体
1. 结构体
#include <stdio.h>
struct t1
{
char a;
short b;
int c;
float d;
double e;
};
int main()
{
struct t1 t1_demo = {'A', 1, 2, 3.3f, 4};
return 0;
}
// 58 - 40 = 18 = 24 byte
// 00401019 lea edi,[ebp-58h]
// 0040101C mov ecx,16h
// 00401021 mov eax,0CCCCCCCCh
// 00401026 rep stos dword ptr [edi]
// 14: struct t1 t1_demo = {'A', 1, 2, 3.3f, 4};
// 00401028 mov byte ptr [ebp-18h],41h a = 1 + 1(填充了1个字节)
// 0040102C mov word ptr [ebp-16h],offset main+20h (00401030) b = 2(本身是2byte未填充)
// 00401032 mov dword ptr [ebp-14h],2 c = 4
// 00401039 mov dword ptr [ebp-10h],40533333h d = 10H - 8H = 8H,占用了8个字节
// 00401040 mov dword ptr [ebp-8],0 e = 4 + 4
// 00401047 mov dword ptr [ebp-4],40100000h
// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
// | a | 0 | b | b | c | c | c | c | d | d | d | d | 0 | 0 | 0 | 0 | e | e | e | e | e | e | e | e |
// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
// 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
// 41 CC 01 00 02 00 00 00 33 33 53 40 CC CC CC CC 00 00 00 00 00 00 10 40
2. 结构体数组
#include <stdio.h>
struct t1
{
char a;
short b;
};
int main()
{
struct t1 t1_demo[2] = {{'A', 1}, {'b', 2}};
return 0;
}
// 00401019 lea edi,[ebp-48h]
// 0040101C mov ecx,12h
// 00401021 mov eax,0CCCCCCCCh
// 00401026 rep stos dword ptr [edi]
// 11: struct t1 t1_demo[2] = {{'A', 1}, {'b', 2}};
// 00401028 mov byte ptr [ebp-8],41h
// 0040102C mov word ptr [ebp-6],offset main+20h (00401030)
// 00401032 mov byte ptr [ebp-4],62h
// 00401036 mov word ptr [ebp-2],offset main+2Ah (0040103a)
// 0019FF2C 41 CC 01 00 62 CC 02 00 内存分配情况