


Warum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?
Die Größe der durch
sizeof() erhaltenen Strukturtypelemente entspricht nicht immer der Größe jedes einzelnen Elements. Manchmal fügt der Compiler etwas Auffüllung hinzu, um Ausrichtungsprobleme zu vermeiden. Daher können sich die Abmessungen ändern. Polsterung wird hinzugefügt, wenn auf ein Strukturelement ein größeres Element folgt oder sich am Ende der Struktur befindet. Verschiedene Compiler haben unterschiedliche Arten von Ausrichtungseinschränkungen. Im C-Standard ist die gesamte Ausrichtungsstruktur von der Implementierung abhängig.
Fall 1
In diesem Fall ist das doppelte Z 8 Bytes lang, was größer als x (4 Bytes) ist. Es werden also weitere 4 Byte Auffüllung hinzugefügt. Darüber hinaus verfügen die Kurztypdaten y über 2 Byte Speicherplatz im Speicher, sodass zusätzliche 6 Byte als Auffüllung hinzugefügt werden.
Beispielcode
#include <stdio.h> struct myStruct { int x; //Integer takes 4 bytes, and padding 4 bytes double z; //Size of double is 8-byte, no padding short int y; //Size of short is 2-byte, padding 6-bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }
Ausgabe 2
Size of struct: 24
Fall 2
In diesem Fall wird zuerst das Double eingefügt, das 8 Byte Platz belegt. Jetzt wird die Ganzzahl x (4 Bytes) hinzugefügt. Es sind also noch 4 Byte Platz übrig. Nach dem Hinzufügen des kurzen Y kann es in weiteren 4 Bytes Platz abgelegt werden, was insgesamt 16 Bytes Platz einnimmt.
Beispielcode
#include <stdio.h> struct myStruct { double z; //Size of double is 8-byte, no padding int x; //Integer takes 4 bytes, and padding 4 bytes short int y; //Size of short is 2-byte, padding 6-bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }
Ausgabe 2
Size of struct: 16
Fall 3
Der dritte Fall belegt ebenfalls 16 Byte Speicherplatz, ist aber anders angeordnet. Da das erste Mitglied ein Double ist, wird es zuerst platziert und dann werden die Kurztypdaten hinzugefügt. Wenn nun versucht wird, eine Ganzzahl einzufügen, kann diese im verbleibenden 6-Byte-Bereich platziert werden. Daher gibt es nach dem Short ein Auffüllen, nach den Integer-Daten jedoch kein Auffüllen.
Beispielcode
#include <stdio.h> struct myStruct { double z; //Size of double is 8-byte, no padding short int y; //Size of short is 2-byte, padding 6-bytes int x; //Integer takes 4 bytes, and padding 4 bytes }; main() { printf("Size of struct: %d", sizeof(struct myStruct)); }
Ausgabe 2
Size of struct: 16
Das obige ist der detaillierte Inhalt vonWarum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In C werden sowohl Strukturen als auch Arrays als Container von Datentypen verwendet, das heißt, wir können sowohl in Strukturen als auch in Arrays Daten speichern und verschiedene Operationen an ihnen ausführen. Basierend auf der internen Implementierung gibt es hier einige grundlegende Unterschiede zwischen den beiden. Sr. Number Key Structure Array 1 Definition Eine Struktur kann als Datenstruktur definiert werden, die als Container verwendet wird und Variablen unterschiedlichen Typs enthalten kann. Ein Array hingegen ist eine Datenstruktur, die als Container verwendet wird und Variablen desselben Typs enthalten kann, jedoch keine Variablen mehrerer Datentypen unterstützt. 2 Speicherzuweisung Speicherzuweisungsstrukturen für Eingabedaten müssen sich nicht an zusammenhängenden Speicherorten befinden. Während im Fall von Arrays die Eingabedaten in einer zusammenhängenden Speicherzuordnung gespeichert werden, bedeutet dies, dass Arrays Daten in einem Speichermodell speichern, das zusammenhängende Speicherblöcke zuweist (d. h. hat).

Strukturzwang in Golang besteht darin, den Wert eines Strukturtyps in einen anderen Typ umzuwandeln. Dies kann durch Techniken wie Behauptungskraftübertragung, Reflexionskraftübertragung und indirekte Zeigerkraftübertragung erreicht werden. Der Assertionszwang verwendet Typzusicherungen, der reflektierende Zwang verwendet den Reflexionsmechanismus und der indirekte Zeigerzwang vermeidet das Kopieren von Werten. Die spezifischen Schritte sind: 1. Assertion Force-Übertragung: Verwenden Sie die Typeassertion-Syntax. 2. Reflection Force-Übertragung: Verwenden Sie die Funktionen „reflect.Type.AssignableTo“ und „reflect.Value.Convert“. 3. Indirekte Zeigerübertragung.

Während sich die PHP-Sprache weiterentwickelt und wächst, werden die Anwendungs- und Betriebsmethoden von Strukturen in PHP immer vollständiger. Neben allgemeinen Variablen und Arrays bietet PHP auch einen flexibleren Datentyp, nämlich die Struktur. Eine Struktur ist ein zusammengesetzter Datentyp, der aus mehreren Datenelementen unterschiedlichen Typs besteht. Es kann verwandte Daten kombinieren, um vollständigere und strukturiertere Daten zu bilden. In PHP können Sie das Verhalten und die Funktionalität von Strukturen simulieren, indem Sie Klassen und Objekte verwenden. Schauen wir uns zunächst an, wie

Verwenden Sie die Funktion json.Marshal, um eine Struktur in einen JSON-String zu konvertieren. In der Go-Sprache können Sie die Funktion json.Marshal verwenden, um eine Struktur in einen JSON-String zu konvertieren. Eine Struktur ist ein Datentyp, der aus mehreren Feldern besteht, und JSON ist ein häufig verwendetes, leichtes Datenaustauschformat. Die Konvertierung von Strukturen in JSON-Strings erleichtert den Datenaustausch zwischen verschiedenen Systemen. Hier ist ein Beispielcode: packagemainimport(&q

Hier werfen wir einen Blick auf anonyme Vereinigungen und Strukturen in der C-Sprache. Anonyme Gewerkschaften und Strukturen sind unbenannte Gewerkschaften und Strukturen. Da sie keinen Namen haben, können wir kein direktes Objekt davon erstellen. Wir verwenden es als verschachtelte Struktur oder Union. Dies sind Beispiele für anonyme Gewerkschaften und Strukturen. struct{ datatypevariable; ...};union{ datatypevariable; ...};In diesem Beispiel erstellen wir

Die Unterschiede zwischen PHP und C# sind: 1. Das Sprachtypsystem ist unterschiedlich, PHP ist dynamisch, während C# ein statischer Typ ist. 2. Die verwendeten Plattformen sind unterschiedlich. PHP kann plattformübergreifend arbeiten, während C# exklusiv für Windows ist . Das Programmierparadigma ist anders: PHP unterstützt objektorientierte, prozedurale und funktionale Programmierung, und C# ist eher objektorientiert. Die Ausführungsgeschwindigkeit ist unterschiedlich, PHP ist schneller und C# ist relativ langsam Anwendungsszenarien sind unterschiedlich, PHP wird in der Webentwicklung, auf Servern usw. verwendet. C# wird für Windows-Desktop- und Webanwendungen verwendet.

In diesem Tutorial besprechen wir ein Programm zum Erstellen eines C/C++-Codeformatierungstools mit Hilfe von Clangtools. SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5 Anschließend erstellen wir eine Python-Datei an einem Speicherort, an dem der aktuelle Benutzer Lese- und Schreibberechtigungen hat. Beispiel importoscpp_extensions=(".cxx",".cpp&

Verwenden Sie die Funktion json.Unmarshal, um eine JSON-Zeichenfolge in eine Struktur zu analysieren. In der Go-Sprache können Sie die Funktion json.Unmarshal verwenden, um eine JSON-Zeichenfolge in eine Struktur zu analysieren. Dies ist eine sehr nützliche Funktion, insbesondere beim Verarbeiten von API-Antworten oder beim Lesen von Konfigurationsdateien. Zuerst müssen wir einen Strukturtyp definieren, der die Struktur des JSON-Objekts darstellt, das wir analysieren möchten. Angenommen, wir haben die folgende JSON-Zeichenfolge: {"name"
