最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你了解C語言內(nèi)存對齊解決的問題

 更新時間:2021年08月15日 10:17:41   作者:Wallace Zhang  
內(nèi)存對齊的目的是為了提高CPU讀寫內(nèi)存里數(shù)據(jù)的速度?,F(xiàn)代的CPU讀取內(nèi)存并不是一個一個字節(jié)挨著讀取,這樣做的效率非常低?,F(xiàn)代的CPU一般以4個字節(jié)(32bit數(shù)據(jù)總線)或者8個字節(jié)(64bit數(shù)據(jù)總線)為一組,一組一組地讀寫內(nèi)存里的數(shù)據(jù)

一、內(nèi)存對齊為4個字節(jié)的好處

首先,了解一下CPU從內(nèi)存里讀取數(shù)據(jù)的流程:

第一步,CPU通過地址總線,找到該數(shù)據(jù)的位置。

第二步,通過控制總線,發(fā)送讀取數(shù)據(jù)的指令。

第三步,通過數(shù)據(jù)總線,從內(nèi)存里獲取該數(shù)據(jù)的內(nèi)容。

在這里插入圖片描述

內(nèi)存對齊使用4個字節(jié)的原因有:

1.STM32單片機的數(shù)據(jù)總線與地址總線都是32bit(4個字節(jié))。

2.方便DMA的搬運,DMA搬運的最大內(nèi)存是32bit(4個字節(jié))。

二、內(nèi)存對齊的目的是以空間換取速度

2.1、內(nèi)存對齊為4的例子

/* 先來一個簡單的結(jié)構(gòu)體 */
struct
{
	char a;
    int  b;

}Test2;

在這里插入圖片描述

CPU讀取內(nèi)存里數(shù)據(jù)的過程:

1.想找變量a:第一次讀取就能找到。

2.想找變量b:第二次讀取就能找到。

這一點很重要,變量a與變量b各自只需要1次尋址就能完成讀取。接下來看一看內(nèi)存如果沒有使用內(nèi)存對齊的例子(當(dāng)我不知道內(nèi)存對齊時,我也是誤以為內(nèi)存里的數(shù)據(jù)是這樣分布的?。?/p>

2.2、內(nèi)存沒有使用內(nèi)存對齊的例子

如果內(nèi)存沒有使用內(nèi)存對齊的話,構(gòu)想的內(nèi)存分布如下:

在這里插入圖片描述

CPU讀取數(shù)據(jù)的過程:

1.想找變量a:第一次讀取就能找到。

2.想找變量b:先讀取第一組內(nèi)存的后三個字節(jié),接著再讀取第二組內(nèi)存的第一個字節(jié),最后將所有字節(jié)合并為4個字節(jié)。

如果內(nèi)存沒有使用內(nèi)存對齊的話,CPU為了獲取變量b花掉了兩次地址尋址,接著還要將字節(jié)合并。所以,內(nèi)存對齊可以有效地提高CPU讀寫內(nèi)存的速度,但是浪費一點空間。

三、掌握內(nèi)存對齊的必要性

了解內(nèi)存對齊的作用后,就能弄懂為什么編譯器要對某些內(nèi)存做了填充。比如本章節(jié)的例子,如果結(jié)構(gòu)體里只有一個char與int變量,無論是char變量在前,還是int變量在前,都肯定會浪費3個字節(jié)被用于填充,湊夠4個字節(jié)變成一組數(shù)據(jù)被CPU一次性讀取。

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Qt兩種定時器使用實現(xiàn)方式

    Qt兩種定時器使用實現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于Qt兩種定時器使用實現(xiàn)方式的相關(guān)資料,Qt中的定時器類是QTimer,QTimer不是一個可見的界面組件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 用C++實現(xiàn)推箱子小游戲

    用C++實現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細介紹了用C++實現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言一維數(shù)組初步學(xué)習(xí)筆記

    C語言一維數(shù)組初步學(xué)習(xí)筆記

    這篇文章主要介紹了C語言一維數(shù)組初步學(xué)習(xí)筆記,包括指針訪問數(shù)組等重要知識點,需要的朋友可以參考下
    2016-05-05
  • 一文總結(jié)C++運算符的使用方法

    一文總結(jié)C++運算符的使用方法

    這篇文章主要為大家詳細總結(jié)了C++中運算符的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05
  • C++虛函數(shù)表實例分析

    C++虛函數(shù)表實例分析

    這篇文章主要介紹了C++虛函數(shù)表,對多態(tài)中用到的虛函數(shù)表進行了比較通俗的實例分析,需要的朋友可以參考下
    2014-09-09
  • OpenCV實現(xiàn)簡單套索工具

    OpenCV實現(xiàn)簡單套索工具

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)簡單套索工具,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ 成員變量的初始化順序問題詳解

    C++ 成員變量的初始化順序問題詳解

    這篇文章主要介紹了C++ 成員變量的初始化順序問題詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++實現(xiàn)圖片轉(zhuǎn)base64的示例代碼

    C++實現(xiàn)圖片轉(zhuǎn)base64的示例代碼

    Base64就是一種 基于64個可打印字符來表示二進制數(shù)據(jù)的表示方法,本文主要為大家詳細介紹了如何使用C++實現(xiàn)圖片轉(zhuǎn)base64,需要的可以參考下
    2024-04-04
  • c++實現(xiàn)通用參數(shù)解析類示例

    c++實現(xiàn)通用參數(shù)解析類示例

    使用命令行執(zhí)行程序的時候在程序后可跟多個參數(shù)列表,而main函數(shù)的argc和argv分別存儲了相關(guān)的參數(shù)個數(shù)和參數(shù)內(nèi)容,而循環(huán)輸入相關(guān)的時候就需要用戶自己來解析相關(guān)參數(shù)。以下代碼用c++的方式實現(xiàn)了相關(guān)解析的封裝,使用起來非常方便
    2014-03-03
  • 在C語言中調(diào)用C++做的動態(tài)鏈接庫

    在C語言中調(diào)用C++做的動態(tài)鏈接庫

    如果你有一個c++做的動態(tài)鏈接庫.so文件,而你只有一些相關(guān)類的聲明,那么你如何用c調(diào)用呢,別著急,本文通過一個小小的例子,讓你能夠很爽的搞定.
    2016-05-05

最新評論

宜章县| 响水县| 沙河市| 驻马店市| 射洪县| 乐平市| 噶尔县| 云和县| 本溪市| 嵊州市| 社会| 高台县| 敖汉旗| 桐庐县| 潼关县| 屯留县| 股票| 青冈县| 武陟县| 惠来县| 曲阜市| 棋牌| 白朗县| 仪征市| 华容县| 陕西省| 桦甸市| 唐海县| 香格里拉县| 郧西县| 汨罗市| 岑溪市| 阳原县| 孝义市| 大港区| 鱼台县| 银川市| 绍兴市| 都匀市| 凤阳县| 忻城县|