欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言詳解熱門考點(diǎn)結(jié)構(gòu)體內(nèi)存對齊

 更新時(shí)間:2022年04月12日 08:06:25   作者:scut-ALong  
C?數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是?C?編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來了解C?的結(jié)構(gòu)體內(nèi)存對齊

一、為什么存在內(nèi)存對齊

        大部分的參考資料都是如是說的:

        1.平臺(tái)原因(移植原因):不是所有的硬件平臺(tái)都能訪問任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能再某些地址處取某些特定類型的數(shù)據(jù),否則拋出硬件異常。

        2.性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地再自然邊界上對齊。原因在于,為了訪問未對其的內(nèi)存,處理器需要作兩次內(nèi)存訪問;而對齊的內(nèi)存訪問僅需要一次訪問。

        總體來說:結(jié)構(gòu)體的內(nèi)存對齊是拿空間來換取時(shí)間的做法

二、如何計(jì)算?(考點(diǎn))

        首先得掌握結(jié)構(gòu)體得對齊規(guī)則:

1.第一個(gè)成員再與結(jié)構(gòu)體變量偏移量為0得地址處。

2.其他成員變量要對齊到自身對齊數(shù)得整數(shù)倍得地址處。

  • 對齊數(shù) = 編譯器默認(rèn)得一個(gè)對齊數(shù) 與 該成員大小的較小值 (VS中默認(rèn)的值為8)

3.結(jié)構(gòu)體總大小為最大對齊數(shù)(每個(gè)成員變量都有一個(gè)對齊數(shù))的整數(shù)倍。

4.如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。

三、手撕代碼

        上面的干貨太干了是不是,小伙伴們可以多讀幾遍,結(jié)合下面練習(xí)把這塊知識(shí)點(diǎn)拿下。

練習(xí)1:

struct s1
{
	char c1;
	int i;
	char c2;
};
printf("%d\n", sizeof(struct s1)); //12

 練習(xí)2:

struct s2
{
	char c1;
	char c2;
	int i;
};
printf("%d\n", sizeof(struct s2)); //8

 練習(xí)3:

struct s3
{
	double d;
	char c;
	int i;
};
printf("%d\n", sizeof(struct s3)); //16

 練習(xí)4:

struct s4
{
	char c1; //0   
	struct s3 s; //8-23
	double d; //24-31
	
	int i;
};
printf("%d\n", sizeof(struct s4));//32

         這是嵌套結(jié)構(gòu)體的情況,在內(nèi)存中所占的每一位已標(biāo)出(要32位,太多了就沒畫圖哈哈)。謝謝大家耐心讀到這里,如果這篇文章對你有所幫助,還請三連支持!

到此這篇關(guān)于C語言詳解熱門考點(diǎn)結(jié)構(gòu)體內(nèi)存對齊的文章就介紹到這了,更多相關(guān)C語言 內(nèi)存對齊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言多文件編程問題解析

    C語言多文件編程問題解析

    在某些場景中,考慮到編譯效率和可移植性,#pragma once 和 #ifndef 經(jīng)常被結(jié)合使用來避免頭文件被 重復(fù)引入,這里介紹用 _Pragma 操作符避免頭文件重復(fù)引入的問題,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解

    StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解

    這篇文章主要介紹了StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++多繼承多態(tài)的實(shí)例詳解

    C++多繼承多態(tài)的實(shí)例詳解

    這篇文章主要介紹了C++多繼承多態(tài)的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • c/c++輸出重定向的方法

    c/c++輸出重定向的方法

    c/c++輸出重定向的方法,需要的朋友可以參考一下
    2013-03-03
  • Opencv處理圖像之輪廓提取

    Opencv處理圖像之輪廓提取

    這篇文章主要為大家詳細(xì)介紹了Opencv處理圖像之輪廓提取,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例

    Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例

    本文主要介紹了Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言實(shí)現(xiàn)井字棋(三子棋)

    C語言實(shí)現(xiàn)井字棋(三子棋)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 解析C++中不能重載為友元函數(shù)的四個(gè)運(yùn)算符

    解析C++中不能重載為友元函數(shù)的四個(gè)運(yùn)算符

    以下是對C++中不能重載為友元函數(shù)的四個(gè)運(yùn)算符進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • c語言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例

    c語言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例

    這篇文章主要介紹了c語言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言實(shí)例講解選擇語句的使用

    C語言實(shí)例講解選擇語句的使用

    選擇語句是C語言中的重要組成部分,該部分也比較基礎(chǔ),本文將通過最通俗易懂的方式來為大家做出講解。相信通過本文的學(xué)習(xí),讓大家一舉拿下C語言選擇語句的知識(shí)點(diǎn)
    2022-05-05

最新評論