Trong đợt kiểm tra mã tôi đã đi qua một số mã định nghĩa một cấu trúc đơn giản như sau:C++ dữ liệu Member Alignment và mảng đóng gói
class foo {
unsigned char a;
unsigned char b;
unsigned char c;
}
Ở những nơi khác, một mảng của các đối tượng này được định nghĩa:
foo listOfFoos[SOME_NUM];
Sau đó, các cấu trúc được nguyên-sao chép vào một bộ đệm:
memcpy(pBuff,listOfFoos,3*SOME_NUM);
mã này dựa trên assumpti a) Kích thước của foo là 3, và không có padding được áp dụng, và b.) Một mảng của các đối tượng này được đóng gói không có đệm giữa chúng.
Tôi đã thử nó với GNU trên hai nền tảng (RedHat 64b, Solaris 9), và nó hoạt động trên cả hai.
Các giả định ở trên có hợp lệ không? Nếu không, trong điều kiện nào (ví dụ: thay đổi trong OS/trình biên dịch) có thể chúng không thành công?
Và ai đó đã phát minh ra std: vector ... –
@Matthieu: Cảm ơn bạn đã nhắc nhở chúng tôi. Tôi chắc chắn OP đã bỏ qua điều đó. – nus