Załóżmy, że mam typ POD tak:Czy kopiowane są bajty dopełnienia typu POD?
struct A {
char a;
int b;
};
W moim systemie, sizeof(A) == 8
, choć sizeof(char) == 1
i sizeof(b) == 4
. Oznacza to, że struktura danych ma 3 nieużywane bajty.
Załóżmy teraz robimy
A x = ...;
A y =x;
Pytanie:
To jest zagwarantowane, że wszystkie 8 bajtów x
i y
będą identyczne, nawet te 3 nieużywane?
Równoważnie, jeśli przeniosę podstawowe bajty niektórych obiektów o numerach do innego programu, który nie rozumie ich znaczenia lub struktury, i traktuje je jako tablicę o długości 8 bajtów, czy ten inny program może bezpiecznie porównać dwie wartości równe A
?
Uwaga: In an experiment with gcc 7, wydaje się, że te bajty zostaną skopiowane. Chciałbym wiedzieć, czy jest to zagwarantowane.
pokrewne: https: // stackoverflow.com/a/1575369/955273 –
Nie sądzę, żeby dupek odpowiadał na pytanie "są to dopełniające bajty tak samo". Mówi tylko, że memcpy je kopiuje, ale nie jest to dokładnie to, o co prosił OP. – vsoftco
@vsoftco * "' = 'jest wymagane tylko do skopiowania członków. Może to, ale nie musi, skopiować dopełnienie." * Drugi akapit w górnej odpowiedzi. –