亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言結構體內存對齊詳解

 更新時間:2022年01月12日 09:50:06   作者:小夏同學—沖??!  
大家好,本篇文章主要講的是C語言結構體內存對齊詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下

1、結構體內存對齊是指當我們創(chuàng)建一個結構體變量時,會向內存申請所需的空間,用來存儲結構體成員的內容。我們可以將其理解為結構體成員會按照特定的規(guī)則來存儲數據內容。

2、結構體的對齊規(guī)則

(1)第一個成員在相比于結構體變量存儲起始位置偏移量為0的地址處。

(2)從第二個成員開始,在其自身對齊數的整數倍開始存儲(對齊數=編譯器默認對齊數和成員字節(jié)大小的最小值,VS編譯器默認對齊數為8)。

(3)結構體變量所用總空間大小是成員中最大對齊數的整數倍。

(4)當遇到嵌套結構體的情況,嵌套結構體對齊到其自身成員最大對齊數的整數倍,結構體的大小為當下成員最大對齊數的整數倍。

3、了解了結構體的對齊規(guī)則后,我們通過實戰(zhàn)來鞏固(實例一至實例三同類,請細品實例四)

實例一:

分析:存儲結構圖如下

紅色填充內存為結構體成員a,因其為char類型且是第一個成員,由規(guī)則(1)可得如下;橙色填充為結構體成員b,因其為int類型且不是第一個成員,由規(guī)則(2)可得如下;綠色填充為結構體成員c,因其為char類型且不是第一個成員,由規(guī)則(2)(3)可得如下;畫紅叉內存位置屬于因對齊造成的浪費內存。

實例二:

 分析:存儲結構如下

紅色填充內存為結構體成員a,因其為char類型且是第一個成員,由規(guī)則(1)可得如下;橙色填充為結構體成員b,因其為char類型且不是第一個成員,由規(guī)則(2)可得如下;綠色填充為結構體成員c,因其為int類型且不是第一個成員,由規(guī)則(2)(3)可得如下;畫紅叉內存位置屬于因對齊造成的浪費內存。

實例三:

  分析:存儲結構如下

紅色填充內存為結構體成員a,因其為double類型且是第一個成員,由規(guī)則(1)可得如下;橙色填充為結構體成員b,因其為char類型且不是第一個成員,由規(guī)則(2)可得如下;綠色填充為結構體成員c,因其為int類型且不是第一個成員,由規(guī)則(2)(3)可得如下;畫紅叉內存位置屬于因對齊造成的浪費內存。

 實例四:

分析:存儲結構圖如下

紅色填充內存為結構體成員a,因其為double類型且是第一個成員,由規(guī)則(1)可得如下;橙色填充為結構體成員s3,因其為嵌套結構體且不是第一個成員,大小為16,由規(guī)則(4)可得如下圖;綠色填充為結構體成員c,因其為int類型且不是第一個成員,由規(guī)則(2)(3)可得如下;畫紅叉內存位置屬于因對齊造成的浪費內存。

總結

到此這篇關于C語言結構體內存對齊詳解的文章就介紹到這了,更多相關C語言結構體內存內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++ float轉std::string 小數位數控制問題

    C++ float轉std::string 小數位數控制問題

    這篇文章主要介紹了C++ float轉std::string 小數位數控制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++ 使用CRC32檢測內存映像完整性的實現步驟

    C++ 使用CRC32檢測內存映像完整性的實現步驟

    當我們使用動態(tài)補丁的時候,那么內存中同樣不存在校驗效果,也就無法抵御對方動態(tài)修改機器碼了,為了防止解密者直接對內存打補丁,我們需要在硬盤校驗的基礎上,增加內存校驗,防止動態(tài)補丁的運用。
    2021-06-06
  • 基于Matlab制作一個數獨求解器

    基于Matlab制作一個數獨求解器

    這篇文章主要為大家詳細介紹了如何利用Matlab制作一個數獨求解器,文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,需要的可以參考一下
    2022-05-05
  • 詳解C/C++高精度(加減乘除)算法中的壓位優(yōu)化

    詳解C/C++高精度(加減乘除)算法中的壓位優(yōu)化

    在高精度計算中數組的每個元素存儲一位10進制的數字,這樣的存儲方式并不是最優(yōu)的,32位的整型其實至少可以存儲9位高精度數字,數組元素存儲更多的位數就是壓位優(yōu)化。本文將展示壓位優(yōu)化的原理以及壓9位的實現和性能對比,需要的可以參考一下
    2023-01-01
  • C++深入探究二階構造模式的原理與使用

    C++深入探究二階構造模式的原理與使用

    C++中經常會因為調用系統資源失敗導致出現BUG,所以在類調用構造函數需要分配系統資源時會出現BUG,從而導致類對象雖然被創(chuàng)建,但是只是個半成品,為了避免這種情況需要使用二階構造模式
    2022-04-04
  • 詳解C語言之緩沖區(qū)溢出

    詳解C語言之緩沖區(qū)溢出

    緩沖區(qū)是一塊連續(xù)的計算機內存區(qū)域,可保存相同數據類型的多個實例。緩沖區(qū)可以是堆棧、堆和靜態(tài)數據區(qū)。在C/C++語言中,通常使用字符數組和malloc/new實現緩沖區(qū)。溢出指數據被添加到分配給該緩沖區(qū)的內存塊之外。緩沖區(qū)溢出是最常見的程序缺陷
    2021-06-06
  • C++ std:map的使用方法

    C++ std:map的使用方法

    std::map是C++標準庫中一個強大而高效的關聯容器,本文就來介紹一下C++ std:map的使用方法,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • C++調試記錄與心得分享

    C++調試記錄與心得分享

    本文給大家詳細記錄了一次C++的調試過程,以及調試的心得,非常的實用,有需要的小伙伴可以參考下
    2017-07-07
  • C語言關于自定義數據類型之枚舉和聯合體詳解

    C語言關于自定義數據類型之枚舉和聯合體詳解

    枚舉顧名思義就是把所有的可能性列舉出來,像一個星期分為七天我們就可以使用枚舉,聯合體是由關鍵字union和標簽定義的,和枚舉是一樣的定義方式,不一樣的是,一個聯合體只有一塊內存空間,什么意思呢,就相當于只開辟最大的變量的內存,其他的變量都在那個變量占據空間
    2021-11-11
  • 通過c++11改進我們的模式之改進命令模式

    通過c++11改進我們的模式之改進命令模式

    這篇我要講的是如何使用c++11改進命令模式,感興趣的朋友可以看下
    2013-11-11

最新評論