Als «memory-alignment» getaggte Fragen

8
Zweck der Speicherausrichtung
Zugegeben, ich verstehe es nicht. Angenommen, Sie haben einen Speicher mit einem Speicherwort mit einer Länge von 1 Byte. Warum können Sie nicht auf eine 4 Byte lange Variable in einem einzelnen Speicherzugriff auf eine nicht ausgerichtete Adresse zugreifen (dh nicht durch 4 teilbar), wie dies bei ausgerichteten Adressen der …

16
Überzeugende Beispiele für benutzerdefinierte C ++ - Allokatoren?
Was sind einige wirklich gute Gründe, sich std::allocatorfür eine kundenspezifische Lösung zu entscheiden? Sind Sie auf Situationen gestoßen, in denen dies für Korrektheit, Leistung, Skalierbarkeit usw. unbedingt erforderlich war? Irgendwelche wirklich klugen Beispiele? Benutzerdefinierte Allokatoren waren schon immer eine Funktion der Standardbibliothek, für die ich nicht viel Bedarf hatte. Ich …

4
Warum hängt die Strukturausrichtung davon ab, ob ein Feldtyp primitiv oder benutzerdefiniert ist?
In Noda Time v2 wechseln wir zur Auflösung von Nanosekunden. Das bedeutet, dass wir keine 8-Byte-Ganzzahl mehr verwenden können, um den gesamten Zeitbereich darzustellen, an dem wir interessiert sind. Dies hat mich veranlasst, die Speichernutzung der (vielen) Strukturen von Noda Time zu untersuchen, was mich wiederum geführt hat eine leichte …

4
Werden Stapelvariablen durch das GCC __attribute __ ((ausgerichtet (x))) ausgerichtet?
Ich habe den folgenden Code: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } Und ich habe folgende Ausgabe: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac Warum ist die Adresse von a[0]kein Vielfaches von 0x1000? Was genau __attribute__((aligned(x)))macht das? Ich …

4
Speicherausrichtung: Wie verwende ich alignof / alignas?
Ich arbeite gerade mit Shared Memory. Ich kann nicht verstehen alignofund alignas. cppreference ist unklar: Gibtalignof "Ausrichtung" zurück, aber was ist "Ausrichtung"? Anzahl der hinzuzufügenden Bytes für den nächsten auszurichtenden Block? gepolsterte Größe? Stapelüberlauf / Blogeinträge sind ebenfalls unklar. Kann jemand klar alignofund deutlich erklären alignas?

2
Warum sind die Adressen von argc und argv 12 Bytes voneinander entfernt?
Ich habe das folgende Programm auf meinem Computer ausgeführt (64-Bit-Intel unter Linux). #include <stdio.h> void test(int argc, char **argv) { printf("[test] Argc Pointer: %p\n", &argc); printf("[test] Argv Pointer: %p\n", &argv); } int main(int argc, char **argv) { printf("Argc Pointer: %p\n", &argc); printf("Argv Pointer: %p\n", &argv); printf("Size of &argc: %lu\n", sizeof …

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.