У меня есть следующий код. Я ожидал, что размер стека в основной функции составит 8 байт в 64-битной системе, но при разборке я вижу странную вещь: это 16. Я использую https://godbolt.org/ x86-64 G CC 9.3. Итак, мой вопрос почему?
#include <memory>
struct my_struct {
char a[10];
int b;
char c;
short d;
};
int main() {
struct my_struct* s = (struct my_struct*)malloc(sizeof(struct my_struct));
printf("%lu\n", sizeof(s));
return 0;
}
.LC0:
.string "%lu\n"
main:
push rbp
mov rbp, rsp
sub rsp, 16
mov edi, 20
call malloc
mov QWORD PTR [rbp-8], rax
mov esi, 8
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
mov eax, 0
leave
ret