Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Wednesday, March 31, 2010

Cách thức bố trí dữ liệu thành viên trong struct để tối ưu bộ nhớ

Để tối ưu hóa bộ nhớ khi sử dụng struct trong C++, bạn cần chú ý đến cách thức bố trí dữ liệu thành viên trong struct. Theo cách thức quản lý bộ nhớ trên Windows nói chung, các dữ liệu thành viên sẽ được cấp phép theo nhóm 4 ô nhớ liên tiếp. Nếu dữ liệu thành viên nào sử dụng hết 4 ô nhớ dành cho nó, thì nó sẽ được cấp phép thêm nhóm 4 ô nhớ mới. Nếu nhóm 4 ô nhớ đó, không được sử dụng hết, thì khi khai báo dữ liệu thành viên tiếp theo, sẽ có hai khả năng xảy ra:
- Nếu dữ liệu mới này có thể chứa vào vùng ô nhớ còn thừa, thì khi đó dữ liệu này sẽ được đưa vào vùng ô nhớ thừa đó.
- Nếu dữ liệu mới này không thể chứa vào vùng ô nhớ còn thừa, thì khi đó, hệ thống sẽ cung cấp thêm nhóm ô nhớ mới cho dữ liệu thành viên.
Do đó, tùy thuộc vào dữ liệu thành viên, ta có cách sắp xếp hợp lý.



Ví dụ:
Nếu ta có ba dữ liệu thành viên thuộc kiểu char, char và int. Trong đó, char có kích thước là 1byte, int có kích thước là 4bytes. Với trường hợp này, ta có thể tạo ra một struct với cách sắp xếp dữ liệu như sau:
a) char|char|int
b) char|int|char
c) int|char|char
Theo cách giải thích ở trên, trường hợp a) kích thước sẽ là 1+1+2+4 (trong đó, 2 là số byte bổ sung để lấp đầy vùng còn trống. Ta cần 4 byte cho int nhưng chỉ thừa 2 byte mà thôi). Trong trường hợp này, kích thước của struct sẽ là 8.
Trong trường hợp b) kết quả 1+3+4+1+3 = 12bytes.
Trong trường hợp c) kết quả là 4+1+1+2=8bytes.
Chắc hẳn, bạn đã thấy trường hợp nào là tối ưu rồi đấy.

1 comment: