Speicherzuweisung Implikationen statischer Datenmitglieder
Das IBM C Knowledge Center erklärt, dass die Erklärung eines statischen Datenmitglieds in der Klassenmitglied -Liste keine Definition ist, die sie außerhalb der Klassenerklärung im Klassenerklärungsbereich definiert muss. Dies wirft die Frage auf, warum dies notwendig ist und welche schematischen Auswirkungen auf die Speicherzuweisung sind.
Gemäß der One Definitionsregel muss jedes statische Objekt in einem Programm genau einmal definiert werden. Wenn die Erklärung des statischen Objekts in der Header -Datei eine Definition wäre, würde dies zu mehreren Definitionen über Übersetzungseinheiten hinweg führen und die Regel verletzen.
Um dies zu vermeiden, ist die Erklärung in der Header -Datei keine Definition. Stattdessen muss außerhalb der Klassendefinition eine einzige Definition bereitgestellt werden, typischerweise in der Quelldatei der primären Übersetzungseinheit. Dies stellt sicher, dass das statische Objekt nur einmal im gesamten Programm definiert ist und sich an die eine Definitionsregel einhält.
In Bezug auf die Speicherzuweisung werden statische Datenelemente in einem speziellen Speichersegment zugewiesen, das als statische Datensegment bekannt ist. Sie werden nur einmal während des Programmstarts initialisiert und behalten ihre Werte während des gesamten Lebensdauers des Programms auf. Dies steht im Gegensatz zu nicht statischen Datenmitgliedern, die im Stapel oder im Haufen zugewiesen werden, wenn ein Objekt erstellt und zerstört wird, wenn das Objekt zerstört wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3