Inhaltsverzeichnis
Fall 3
Beispielcode
Ausgabe 2
Heim Backend-Entwicklung C++ Warum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?

Warum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?

Aug 26, 2023 am 09:29 AM
结构体 c/c++ sizeof

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.

Warum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?

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));
}
Nach dem Login kopieren

Ausgabe 2

Size of struct: 24
Nach dem Login kopieren

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.

Warum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?

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));
}
Nach dem Login kopieren

Ausgabe 2

Size of struct: 16
Nach dem Login kopieren
Nach dem Login kopieren

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.

Warum ist in C/C++ die Größe der Struktur nicht gleich der Summe der Größe jedes Mitglieds?

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));
}
Nach dem Login kopieren

Ausgabe 2

Size of struct: 16
Nach dem Login kopieren
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen Struktur und Array in der Sprache C? Was ist der Unterschied zwischen Struktur und Array in der Sprache C? Aug 30, 2023 pm 09:37 PM

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).

Starke Übertragung der Golang-Struktur: Detaillierte Erläuterung der Implementierungsprinzipien und -techniken Starke Übertragung der Golang-Struktur: Detaillierte Erläuterung der Implementierungsprinzipien und -techniken Apr 03, 2024 pm 03:09 PM

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.

Anwendungs- und Betriebsmethoden von Strukturen in PHP Anwendungs- und Betriebsmethoden von Strukturen in PHP Jul 16, 2023 pm 11:21 PM

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

Konvertieren Sie die Struktur mit der Funktion json.Marshal in einen JSON-String Konvertieren Sie die Struktur mit der Funktion json.Marshal in einen JSON-String Jul 24, 2023 pm 12:54 PM

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

Anwendung anonymer Gewerkschaften und Strukturen in der Sprache C Anwendung anonymer Gewerkschaften und Strukturen in der Sprache C Sep 16, 2023 pm 06:45 PM

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

Was sind die Unterschiede zwischen PHP und C#? Was sind die Unterschiede zwischen PHP und C#? Jun 02, 2023 pm 01:45 PM

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.

Erstellen Sie mit dem Clang-Tool ein C/C++-Codeformatierungstool Erstellen Sie mit dem Clang-Tool ein C/C++-Codeformatierungstool Aug 26, 2023 pm 01:09 PM

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 einen JSON-String in eine Struktur zu analysieren Verwenden Sie die Funktion json.Unmarshal, um einen JSON-String in eine Struktur zu analysieren Jul 25, 2023 pm 10:49 PM

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"

See all articles