結構大小不等於各資料型別之和 程式設計之道學習筆記1

2021-06-23 07:02:57 字數 702 閱讀 8858

在學習結構的時候,可能大家都聽說過這樣一句話:結構的大小等於結構中的各資料型別之和。 其實在理論上應該是這樣的,但實際上卻不完全對。因為結構體本身是可以位元組對齊的。

結構體的位元組對齊是指編譯器在為結構體變數分配記憶體時,保證下乙個成員的偏移量為成員型別的整數倍。因此,對於一些結構體變數,其大小並不等於結構體中每乙個成員的大小總和。例如:

struct mystruct;

其中,one為double型別,佔8個位元組,two為char型別,佔1個位元組,three為int型別,佔4個位元組,大小總和為13個位元組,但實際上使用sizeof()求得的結構體大小為16個位元組。具體原因為:

成員one佔8個位元組,在為成員two分配記憶體時,其起始位置9相對與結構開始位置1的偏移量為8,是two成員型別(char佔1個位元組)的整數倍,因此在9的位置為two分配了1個位元組的記憶體。為three成員分配記憶體時,當前位置是10,相對與結構開始位置1的偏移量為9,不是three成員型別(int佔4個位元組)的整數倍,為了結構體的位元組對齊,向下移動3個位元組,當前位置為13,相對與結構開始位置1的偏移量為12,是three成員型別(int佔4個位元組)的整數倍,因此在位置13處開始為three成員分配4個位元組的記憶體。這就導致mystruct結構體占用了16個位元組的記憶體空間。

小結:在程式開發中不用自己計算某個結構體的大小,應該呼叫sizeof()計算結構體的大小。這樣才能獲取到正確的大小,否則很容易出錯。

營銷不等於銷售

營銷 銷售 企業的宗旨就是創造客戶,企業有且只有兩個基本職能,即營銷和創新。營銷和創新創造產出,其它一切環節只能算作投入。營銷與創新是任何乙個組織在設定目標時必須考慮的基本方面,只有這兩個方面才能使企業獲得產出。顧客付款購買的也是企業在這兩個方面的業績與貢獻。我們的使命是什麼?我們的客戶是誰?我們的...

「封口」不等於「風口」!

風口論 已是眼下熱門詞選,只要有一點起勢的行業都會被一些人冠以風口一詞,然後一群人跟著瞎起鬨。他們眼中的的風口就出來了,但是真的能把豬吹起來嘛,那就不見得了。然而一些好的東西,卻在這些假風口的 光芒 下黯然失色。現在我們就來盤點2018年2大風口誤區,和一大過失。投資方等來的不是鉅額的回報,是一張張...

自由不等於免費

課堂回顧 你好,今天我要繼續跟你講 權利 的概念。我要給你澄清兩個連美國的 官都分分鐘弄錯的概念,那就是自由和免費。在英文裡面,自由和免費剛好是同乙個詞,free。我們今天要講的是政治上的自由,政治上的自由權利並不等於經濟上的免費 political freedom is not economica...