01/10/2018, 12:03
Kích thước của struct?
Giả sử máy tính của bạn dùng vi xử lý x86-64 ( 64-bits).
Chúng ta định nghĩa struct dưới đây (ABR):
struct TREE {
int data;
struct TREE * gauche;
struct TREE * droite;
};
struct TREE * abr= malloc(sizeof(struct TREE));
abr chứa địa chỉ bắt đầu của struct được cấp bộ nhớ động
____________[abr]_______________là địa chỉ của data
------------------[abr+8]--------------------------là địa chỉ của gauche.
------------------[abr+16]-------------------------là địa chỉ của droite.
kích thước của sizeof(struct TREE) là:-----------------[24 byte]----------------.
//
mình không hiểu lắm chỗ abr, abr+8, abr+16 và kích thước của struct TREE là 24 bye
Bài liên quan
gauche = trái
droite = phải (from google :v)
Mình thấy khẳng định 8 byte cho mỗi thành phần là có lí nếu dùng x64. Lí do là kích thước của word thường bằng kích thước
int
, và cũng bằng kích thước địa chỉ (x64/x86).Ngoài ra các thành phần được sắp xếp trên mem theo đúng thứ tự đã đưa ra, và các thành phần đều align 8 byte nên struct đúng là 24 byte.
" kích thước int, và cũng bằng kích thước địa chỉ (x64/x86)." mình chưa rõ chỗ này lắm
1 con trỏ trong x86 thường là 4byte, không quan trọng nó mang trong mình những gì. Trên x64 (còn tuỳ thuộc vào conpiler và os) nó thường là 8byte.
int cũng tương tự, nó phụ thuộc vào 2 yếu tố os và compiler. Thường cố định là x86:4B, x86_64:8B
Thanks bạn nhiều