目錄
情況3
範例程式碼
輸出2
首頁 後端開發 C++ 為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和?

為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和?

Aug 26, 2023 am 09:29 AM
結構體 c/c++ sizeof

sizeof() 所取得的結構類型元素的大小並不總是等於每個單獨成員的大小。有時編譯器會添加一些填充以避免對齊問題。所以尺寸可能會改變。當結構成員後面跟著一個尺寸較大的成員或位於結構末端時,將添加填充。不同的編譯器有不同類型的對齊約束。在 C 標準中,總對齊結構取決於實作。

情況 1

在這種情況下,雙精確度 z 為 8 位元組長,大於 x(4 位元組) )。因此又增加了 4 個位元組的填充。此外,短類型資料 y 在記憶體中具有 2 個位元組空間,因此添加了額外的 6 個位元組作為填充。

為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和?

範例程式碼

#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));
}
登入後複製

輸出2

Size of struct: 24
登入後複製

情況2

在這種情況下,先插入雙精度數,它佔用8 位元組的空間。現在加入了整數 x(4 位元組)。所以還有另外4個位元組的空間。新增短y後,可以放入額外的4位元組空間中,總共佔用16位元組空間。

為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和?

範例程式碼

#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));
}
登入後複製

輸出2

Size of struct: 16
登入後複製
登入後複製

情況3

第三種情況也佔用16位元組的記憶體空間,但排列方式不同。由於第一個成員是double,所以首先放置,然後再加入short 類型資料。現在,當整數嘗試插入時,可以將其放入剩餘的 6 位元組區域中。因此,short 之後存在一個填充,但整數資料之後不需要填充。

為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和?

範例程式碼

#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));
}
登入後複製

輸出2

Size of struct: 16
登入後複製
登入後複製

以上是為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在C語言中,結構體(Structure)和陣列(Array)之間的差異是什麼? 在C語言中,結構體(Structure)和陣列(Array)之間的差異是什麼? Aug 30, 2023 pm 09:37 PM

在C中,結構體和數組都用作數據類型的容器,即在結構體和數組中我們都可以存儲數據,也可以對它們執行不同的操作。基於內部實現,以下是兩者之間存在一些基本差異。 Sr.編號鍵結構數組1定義結構體可以定義為一種資料結構,用作容器,可以容納不同類型的變數。另一方面,數組是一種用作容器的資料結構,可以容納相同類型的變量,但不支援多種資料類型變數。 2記憶體分配輸入資料的記憶體分配結構不必位於連續的記憶體位置。而在數組的情況下,輸入資料儲存在連續的記憶體分配中,這意味著數組將資料儲存在分配連續記憶體區塊的記憶體模型中(即,具有

Golang結構體強轉:實作原理與技巧詳解 Golang結構體強轉:實作原理與技巧詳解 Apr 03, 2024 pm 03:09 PM

Golang中結構體強轉是將一種結構體類型的值轉換為另一種類型。可以透過斷言強轉、反射強轉、指針間接強轉等技巧來實現。斷言強轉使用型別斷言,反射強轉使用反射機制,指標間接強轉避免值複製。具體步驟為:1.斷言強轉:使用typeassertion語法;2.反射強轉:使用reflect.Type.AssignableTo和reflect.Value.Convert函數;3.指標間接強轉:使用指標解引用。

結構體在PHP的應用與操作方法 結構體在PHP的應用與操作方法 Jul 16, 2023 pm 11:21 PM

結構體在PHP的應用與操作方法隨著PHP語言的不斷發展壯大,其功能也日益完善。除了常見的變數和數組,PHP還提供了一種更靈活的資料類型,即結構體(Struct)。結構體是一種由多個不同類型的資料成員組成的複合資料類型。它可以將相關資料組合,形成一個更完整、更有結構的資料。在PHP中,可以透過使用類別和物件來模擬結構體的行為和功能。首先,我們來看看如何

使用json.Marshal函數將結構體轉換為JSON字串 使用json.Marshal函數將結構體轉換為JSON字串 Jul 24, 2023 pm 12:54 PM

使用json.Marshal函數將結構體轉換為JSON字串在Go語言中,可以使用json.Marshal函數將結構體轉換為JSON字串。結構體是一種由多個欄位組成的資料類型,而JSON是一種常用的輕量級資料交換格式。將結構體轉換為JSON字串可以方便地在不同系統之間交換資料。下面是一個範例程式碼:packagemainimport(&q

匿名聯合體與結構體在C語言的應用 匿名聯合體與結構體在C語言的應用 Sep 16, 2023 pm 06:45 PM

這裡我們來看看什麼是C語言中的匿名聯合體和結構體。匿名聯合體和結構體就是未命名的聯合體和結構體。由於它們沒有名稱,因此我們無法建立它的直接物件。我們將其用作嵌套結構或聯合。這些是匿名聯合和結構的範例。 struct{  datatypevariable;  ...};union{  datatypevariable;  ...};在這個例子中,我們正在創建

php與c#的差別有哪些 php與c#的差別有哪些 Jun 02, 2023 pm 01:45 PM

php與c#的差異有:1、語言型別系統不同,PHP屬於動態,而C#為靜態型別;2、使用的平台不同,PHP可實現跨平台,而C#為Windows專屬;3、程式設計範式不同,PHP支援物件導向、過程化和函數式編程,C#更傾向於物件導向編程;4、執行速度不同,PHP速度更快,C#相對較慢;5、應用場景不同,PHP應用於Web開發、伺服器等, C#用於Windows桌面和網路應用程式。

使用json.Unmarshal函數將JSON字串解析為結構體 使用json.Unmarshal函數將JSON字串解析為結構體 Jul 25, 2023 pm 10:49 PM

使用json.Unmarshal函數將JSON字串解析為結構體在Go語言中,可以使用json.Unmarshal函數將JSON字串解析為結構體。這是一個非常有用的功能,特別是在處理API回應或讀取設定檔時。首先,我們要定義一個結構體類型,來表示我們要解析的JSON物件的結構。假設我們有如下的JSON字串:{"name"

使用Clang工具建立一個C/C++程式碼格式化工具 使用Clang工具建立一個C/C++程式碼格式化工具 Aug 26, 2023 pm 01:09 PM

Inthistutorial,wewillbediscussingaprogramtocreateaC/C++codeformattingtoolwiththehelpofclangtools.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5然後我們將在當前用戶具有讀寫權限的位置創建一個Python檔案。範例importoscpp_extensions=(".cxx",".cpp&

See all articles