C C 關於sizeof 的規律

2021-10-10 01:37:53 字數 909 閱讀 8538

1.每個變數在記憶體中的位置一定是其位元組大小的整數倍

2.結構體整體位元組大小一定是該結構體中最大的位元組變數的整數倍

3.不能存放變數的位元組位置時自動填充該位置

4.結構體整體位元組大小不是該結構體中最大的位元組變數的整數倍時往後填充使其成為整數倍

先來幾個例子

** 1

#include using namespace std;

struct a

;int main()

;int main()

{ a exampleb;

cout << "結構體exampleb的位元組大小為:"<< sizeof(exampleb) 執行結果

結構體exampleb的位元組大小為:24

同樣我們用圖來解釋:

和第乙個例子一樣,由圖看出 int a(位元組4)是0的整數倍,放在第1個位置,位置4是 char b(位元組1)整數倍,所以 char b放在第4個位置,注意:這裡5、6、7位置被填充的原因並不是和第乙個例子一樣,而是第1條規律:每個變數在記憶體中的位置一定是其位元組大小的整數倍 和第3條規律:不能存放變數的位元組位置時自動填充該位置,因此5、6、7位置不是double b(位元組8)的整數倍所以被自動填充了,到第8位置放double c(位元組8),第16個位置是 int e(位元組4)的整數倍,放 int e,之後4個位置原因就和第乙個例子一樣了:結構體整體位元組大小不是該結構體中最大的位元組變數的整數倍時往後填充使其成為整數倍,20個位元組不是double c(位元組8)的整數倍,填充4個變成24個就是8的整數倍了

這就是老師在上課時講解的關於sizeof()的一些知識,希望對大家有所幫助~~~

C C 中sizeof的運用

通過實踐將個人對sizeof的理解寫到這裡,還望大家的指點 以下是我的實踐 include class a class b class c class d virtual public b class e public c class f virtual public b class g publi...

C C 物件模型的sizeof問題

昨天去了一家學長的公司,談了談我的疑惑,然後做了乙份題。有一些收穫,想跟大家分享一下。主要是c 物件的sizeof問題。先上 include stdafx.h include class a class b class c class d int num class e public d class...

CC 中sizeof函式的用法

c c 中sizeof 函式的用法 學習c c 有時會遇到下面的情況 已知 char str1 absde char str2 absde char str3 8 char str4 0123456789 為什麼sizeof str1 4 sizeof str2 6 sizeof str3 8 si...