01/10/2018, 08:24

Tại sao biến struct gồm 1 biến int và 1 biến char lại có sizeof là 8 bytes?

Như đã nói ở trên title topic, e có đoạn code đơn giản sau:

#include <iostream>

struct structure {
    int x;
    char c;
};
int main()
{
    std::cout << sizeof(structure) << std::endl;
    return 0;
}

Khi xuất ra, chương trình lại cho kết quả là 8 (bytes) => vì sao lại thế ạ ?
Vì theo e biết sizeof(structure) = sizeof(x) + sizeof(c) = 4 + 1 = 5 mà sao chương trình lại cho là 8 ???

viết 10:33 ngày 01/10/2018

Do data alignment. Bài viết này trình bày rất rõ ràng, bạn có thể tham khảo:

Mình có bài toán nhỏ như sau đố các bạn cho vui: typedef struct { char c; int i; } mstruct; Đố các bạn sizeof(mstruct) là bao nhiêu byte. Chú ý: các expert không được trả lời nhé! Mình dám cá là size của mstruct không phải là 5 bytes. Vì sao như vậy? Theo đúng lý thuyết ta học thì size của struct phải là tổng size của các thành phần bên trong nó mà. Vậy tại sao không phải là 5 bytes, có gì huyền bí ở đây? Để hiểu rõ về việc này, chúng ta hãy cùng tìm hiểu sơ qua Da…

Long Dragon viết 10:24 ngày 01/10/2018

Anh @freedom có thể nói cho e về công dụng của #pragma pack(n) hay #pragma pack(1) không ? Em thấy bài viết trên chưa nói về cái này, còn slide thầy Phương nói nhanh & chung chung quá e ko hiểu

*grab popcorn* viết 10:25 ngày 01/10/2018

Bạn tham khảo link này đây

stackoverflow.com
Cenoc

#pragma pack effect

c, c-preprocessor
asked by Cenoc on 01:12PM - 23 Jul 10

Bài liên quan
0