Giả sử tôi có một loại POD như thế này:Các byte đệm của loại POD có được sao chép không?
struct A {
char a;
int b;
};
Trên hệ thống của tôi, sizeof(A) == 8
, mặc dù sizeof(char) == 1
và sizeof(b) == 4
. Điều này có nghĩa là cấu trúc dữ liệu có 3 byte không sử dụng.
Bây giờ giả sử chúng ta làm
A x = ...;
A y =x;
Câu hỏi:
Có đảm bảo rằng tất cả 8 byte của x
và y
sẽ giống hệt nhau, ngay cả những người không sử dụng 3?
Tương tự, nếu tôi chuyển byte cơ bản của một số đối tượng khác không hiểu ý nghĩa hoặc cấu trúc của chúng và xử lý chúng thành một mảng 8 byte, chương trình kia có thể so sánh an toàn hai số A
s để bình đẳng không?
Lưu ý: In an experiment with gcc 7, có vẻ như những byte đó được sao chép. Tôi muốn biết nếu điều này được đảm bảo.
liên quan: https: // stackoverflow.com/a/1575369/955273 –
Tôi không nghĩ rằng câu trả lời của câu hỏi "là các byte đệm giống nhau". Nó chỉ nói rằng memcpy sao chép chúng, nhưng đó không phải là chính xác những gì OP hỏi. – vsoftco
@vsoftco * "' = 'chỉ được yêu cầu để sao chép các thành viên. Có thể hoặc không sao chép phần đệm." * Đoạn thứ hai trong câu trả lời trên cùng. –