结构体

Tutorial: C与汇编 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
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 内存分配情况
Prev: 数组 Next: 指针