Was ist eine "gepackte" Struktur in C?
Werde ich zwar etwas C-code geschrieben für den Microchip C30 compiler und ich sehe oft Strukturen wie folgt definiert:
typedef struct __attribute__((__packed__))
{
IP_ADDR MyIPAddr; //IP address
IP_ADDR MyMask; //Subnet mask
IP_ADDR MyGateway; //Default Gateway
//etc...
} APP_CONFIG;
Was bedeutet verpackt zu bedeuten?
InformationsquelleAutor der Frage PICyourBrain | 2011-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Strukturen definiert, der compiler darf hinzufügen-Leerstellen (Leerzeichen, ohne tatsächliche Daten), so dass die Mitglieder fallen in Grenzen-Adresse, die leichter zugänglich für die CPU.
Beispielsweise auf einer 32-bit CPU, 32-bit-Mitglieder beginnen soll, die auf Adressen, die Vielfaches von 4 bytes, um effizient zugegriffen (gelesen und geschrieben). Die folgende Struktur-definition-fügt eine 16-bit-padding zwischen den beiden Mitgliedern, so dass das zweite Mitglied, fällt einem die richtige Adresse Grenze:
Die Struktur im Speicher der obigen Struktur, in einem 32-bit-Architektur ist (~ = padding):
Wenn eine Struktur verpackt ist, diese Polster sind nicht eingefügt. Der compiler erzeugt mehr code (läuft langsamer) zu extrahieren, die Blockfreien Mitglieder-Daten, und auch schreiben.
Die gleiche Struktur, wenn verpackt, erscheint in der Erinnerung als etwas wie:
InformationsquelleAutor der Antwort Juliano
Es weist den compiler an, nicht hinzufügen, keine Polsterung zwischen den Mitgliedern der
struct
.Sehen, zum Beispiel, auf dieser Seite.
InformationsquelleAutor der Antwort NPE
_attribute__((__packed__))
heißt (wahrscheinlich) "stecken Sie keine Polsterung, um die Dinge schneller" und kann auch bedeuten, "nicht fügen Sie eine beliebige Ausrichtungen zu erhalten Ausrichtung".InformationsquelleAutor der Antwort Vatine