Frage an Standard Gurus: Structmember lückenlos im RAM ?
-
Hallo,
in diesem C++ Thread wird die Anordnung der Strukturelemente im Speicher diskutiert:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-245788-and-start-is-10.html
Es stellt sich heraus, das die Strukturelemente nicht unbedingt lückenlos im Speicher sein müssen:Nonstatic data members of a (non-union) class declared without an intervening access-specifier are allocated so that later members have higher addresses within a class object. The order of allocation of nonstatic data members separated by an access-specifier is unspecified (11.1). Implementation alignment requirements might cause two adjacent members not to be allocated immediately after each other; so might requirements for space for managing virtual functions (10.3) and virtual base classes (10.1).
Ist das in C auch so?
-
Ja.
-
struct0r schrieb:
Es stellt sich heraus, das die Strukturelemente nicht unbedingt lückenlos im Speicher sein müssen:
...
Ist das in C auch so?ist so. du solltest z.b. niemals einen struct* in einen char* casten und hoffen, dass du damit auf die richtigen stellen zugreifst.
-
Das stimmt.
-
OK.
-
du kannst dies mit einer #pragma pack direktive erzwingen, wenn dies notwendig sein sollte. dies sollte aber aus performance gründen nur aus gutem grund angewandt werden.