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

一篇文章帶你了解C語言內存對齊解決的問題

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

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

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

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

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

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

在這里插入圖片描述

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

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

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

二、內存對齊的目的是以空間換取速度

2.1、內存對齊為4的例子

/* 先來一個簡單的結構體 */
struct
{
	char a;
    int  b;

}Test2;

在這里插入圖片描述

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

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

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

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

2.2、內存沒有使用內存對齊的例子

如果內存沒有使用內存對齊的話,構想的內存分布如下:

在這里插入圖片描述

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

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

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

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

三、掌握內存對齊的必要性

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

總結

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

相關文章

  • 基于Qt實現(xiàn)一個圖片對比選擇瀏覽器

    基于Qt實現(xiàn)一個圖片對比選擇瀏覽器

    這篇文章主要為大家詳細介紹了如何基于Qt實現(xiàn)一個圖片對比選擇瀏覽器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • C語言實現(xiàn)套接字操作的示例代碼

    C語言實現(xiàn)套接字操作的示例代碼

    在C語言中,套接字(Socket)是一種進行網(wǎng)絡通信的接口,這篇文章就來和大家介紹一下C語言中是如何進行套接字操作的,需要的可以參考一下
    2023-06-06
  • C++?move()函數(shù)及priority_queue隊列使用記錄

    C++?move()函數(shù)及priority_queue隊列使用記錄

    move(obj)函數(shù)的功能是把obj當做右值處理,可以應用在對象的移動上,這篇文章主要介紹了C++?move()函數(shù)及priority_queue隊列使用記錄,需要的朋友可以參考下
    2023-01-01
  • 使用Matlab制作簡易版八分音符醬游戲

    使用Matlab制作簡易版八分音符醬游戲

    八分音符醬作為一款聲音控制類游戲,當時還是很受大家的喜愛的。本文將用Matlab制作一款簡易版的八分音符醬游戲,感興趣的可以學習一下
    2022-02-02
  • 錯誤:sem_union的存儲大小未知問題的解決方法

    錯誤:sem_union的存儲大小未知問題的解決方法

    這篇文章主要介紹了錯誤:sem_union的存儲大小未知問題的解決方法,需要的朋友可以參考下
    2016-10-10
  • 為什么要學習C語言 C語言優(yōu)勢分析

    為什么要學習C語言 C語言優(yōu)勢分析

    不止一個學生問到我:“老師,為什么我們的應用程序設計要學C語言而不是別的?C語言不是已經(jīng)過時了嗎?如果現(xiàn)在要寫一個Windows程序,用VB或Dephi開發(fā)多快呀,用C行嗎?退一萬步,為什么選擇C而不是C++呢?”
    2013-07-07
  • C++ RTTI與4種類型轉換的深入理解

    C++ RTTI與4種類型轉換的深入理解

    這篇文章主要給大家介紹了關于C++ RTTI與4種類型轉換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C語言實現(xiàn)貪吃蛇小黑窗

    C語言實現(xiàn)貪吃蛇小黑窗

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)貪吃蛇小黑窗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應用教程

    C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應用教程

    Qt?SQL模塊是Qt中用來操作數(shù)據(jù)庫的類,該類封裝了各種SQL數(shù)據(jù)庫接口,可以很方便的鏈接并使用。本文主要介紹了Qt數(shù)據(jù)庫QSql增刪改查組件的應用教程,感興趣的同學可以學習一下
    2021-12-12
  • C++ 虛函數(shù)表圖文解析

    C++ 虛函數(shù)表圖文解析

    最近學了設計模式中的簡單工廠模式,對多態(tài)有了具體的認識。于是補了補多態(tài)、虛函數(shù)、虛函數(shù)表相關的知識,本文介紹了C++ 虛函數(shù)表,感興趣的了解一下
    2021-05-05

最新評論