c++ int 轉 short_C/C++結構體內存對齊

在面試或工作中,經常會遇到內存對齊的問題。這里結合我的理解談一談對內存對齊的理解。

1. 為什么要內存對齊,不對齊會怎么樣?

內存中存放數據是為了給CPU使用,CPU訪問內存數據時會受到地址總線寬度的限制,也就是一次能從內存中拿多少數據到CPU(這里我們忽略CPU高速緩存)。而且,CPU從內存中獲取數據時起始地址必須是地址總線寬度的倍數(我們用的intel CPU能處理不對齊的情況,某些CPU不能處理,即遇到不對齊程序會崩潰...)。

例如:CPU地址總線是64位(bit,8字節),當一個int(4字節)存儲到地址: 0x06 時,CPU如何獲取這個int值?

第一步:讀取0x00~0x08 8個字節,然后保存后兩個字節到 int 的前兩個字節。

第二步:讀取0x08~0x0F 8個字節,然后保存前兩個字節到int的后兩個字節。

3e852638f195d811f25c3788f02a758c.png
圖1-內存訪問

上面的例子可以看到,從內存中讀取一個int到CPU中需要從內存中讀取兩次。這樣大大降低了執行的效率,如何提升性能? 答案就是內存對齊!

2. 內存對齊的單位是什么?

通過上面的分析,知道內存對齊的目的是為了讓CPU能一次獲取到數據,從而提升性能。學過匯編會了解,CPU只能使用基本類型,char, short, int, long, float, double 等,不能使用數組或結構體等復合類型(匯編中并沒有一個指令能直接存取一個struct或數組)。所以:內存對齊的單位是基本類型,目標是讓CPU能一次獲取到基本類型的值。

3. 如何進行內存對齊?

通過上面的介紹,我們可以得出:

a. 內存對齊是指,變量地址的對齊,而不是變量大小的對齊。變量地址的對齊是指變量地址 對 變量大小求模為0。

b. 結構體中每一個成員都要求是內存對齊的。

c. 結構體中的數組,按數組的類型對齊。

4. 如何計算內存對齊

分析內存對齊,只需要記住上一個小節中:變量地址的對齊是指變量地址 對 變量大小求模為0。數組以數組本身的類型來計算,例如:char c[5] 按 char 類型大小計算對齊,double d[22] 按 double 類型大小計算對齊。

ea25f1d8d527feda79d7429221f4ba7a.png
圖2-示例程序

8050b584ad2dd94704294354221f02a7.png
圖3-運行結果

通過這個示例,仔細想想,內存對齊就很簡單了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276041.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對于日訪問量達到1W IP的處理方法

轉自:http://www.java123.net/56026-2.html 對于日訪問量達到1W IP的處理方法 一、1萬ip真是不高: 1.常用數據用緩存,減輕數據庫壓力。 2.詳細頁數據生成靜態頁面。 二、10000算是相當小的了,不需要什么特殊的處理機制,只要符合最一般的…

數據契約(DataContract)

WCF第一要素就是契約: 服務契約用于聲明可用于遠程訪問的類型。在Interface或class開始處使用服務契約標簽. [ServiceContract] Public interface Iservice { } 接口調用契約的好處: 1. 同一服務類型可以實現多個不相干的服務契約. 2. 有利于版本升級 3. 按照…

jakob slam_Jakob Nielsen針對用戶界面設計的第二種可用性啟發法

jakob slamIn the pursuit of providing great user experiences, it’s imperative that digital products are evaluated. A 為了提供出色的用戶體驗,必須對數字產品進行評估。 一個 heuristic evaluation is essential to delivering great user experiences. I…

微軟Office 365正式上架Mac App Store

今天,Office 365正式在Mac App Store上架,Mac用戶可以輕松下載Word,Outlook,Excel,PowerPoint,OneNote以及整套微軟的熱門應用程序。用戶還可以從應用程序內訂購Office 365。蘋果全球開發者關系高級主管Sha…

一文搞懂瀏覽器原理

大家好,我是若川。最近這幾年,云計算的普及和 HTML5 技術的快速發展,越來越多的應用轉向了瀏覽器 / 服務器(B/S)架構,這種改變讓瀏覽器的重要性與日俱增,視頻、音頻、游戲幾大核心場景也都在逐漸…

python處理excel可視化_python如何將excel數據處理可視化

python將excel數據處理可視化的方法:首先安裝xlrd與xlwt庫,進行表格讀取;然后使用pyecharts生成Echarts圖表的類庫;最后安裝Echarts讀取Excel數據及顯示即可。python將excel數據處理可視化的方法:Excel表操作python操作…

dataframe中將一列數據切分成多列

為什么80%的碼農都做不了架構師&#xff1f;>>> 原sheet中數據 目的 將【備注】列切分成【key】列和【value】列 Python sheet[key] sheet[備注].str.extract(r(_.*(?\u503c))) sheet[value] sheet[備注].str.extract(r((?<).*))結果 參考 pandas.Series.st…

matplotlib可視化_EDA:Geopandas,Matplotlib和Bokeh中的可視化

matplotlib可視化Nowadays, everyone is immersed with plenty of data from news sources, cellphones, laptops, workplaces, and so on. Data conveys with tons of information from different data variables like date, string, numeric, and geographical format. How t…

(轉)結婚那天,媽問我:坐在角落里象兩個要飯模樣的人是誰?

人人看到的文章 很感人~~~~結婚那天&#xff0c;媽問我&#xff1a;坐在角落里象兩個要飯模樣的人是誰&#xff1f; 我看過去的時候&#xff0c;有個老頭正盯著我&#xff0c;旁邊還有個老太太&#xff0c;發現我看著他們時趕忙低下頭。我不認識他們但也不象要飯的&#xff0c;…

nginx-1.13.x源碼安裝

Nginx 安裝配置【依賴庫】[ zlib ]&#xff08;下載&#xff09;http://download.chinaunix.net/download.php?id24013&ResourceID12241 [ pcre ]apt-get install libpcre-dev[ openssl ]&#xff08;下載&#xff09;http://download.chinaunix.net/download.php?id3937…

小技巧!CSS 整塊文本溢出省略特性探究

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天的文章很有意思&#xff0c;講一講整塊文本溢出省略打點的一些有意思的細節。點擊下方卡片關注我&#xff0c;或者查看源碼系列文章。文本超長打點我們都知道&#xff0c;到今天&#xff08…

linux配置ip地址 suse_SUSE Linux下設置IP的兩種方法

第一種SUSE Linux IP設置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 uproute add default gw 192.168.1.2釋義&#xff1a;#IP配置&#xff0c;包括子網掩碼,看情況修改eth0和192.168.1.22#網關修改 ,看情況修改192.168.1.2第二種SUSE Linux IP設置方法在suse操作系…

寒假作業3:抓老鼠啊

7-1 抓老鼠啊~虧了還是賺了&#xff1f; &#xff08;20 分&#xff09; 某地老鼠成災&#xff0c;現懸賞抓老鼠&#xff0c;每抓到一只獎勵10元&#xff0c;于是開始跟老鼠斗智斗勇&#xff1a;每天在墻角可選擇以下三個操作&#xff1a;放置一個帶有一塊奶酪的捕鼠夾(T)&…

筆記本移交_創建完美的設計移交

筆記本移交重點 (Top highlight)Design specifications (specs) are guidelines that developers will use to implement a design. Think of an architect providing building blueprints to the construction team. Many designers think of specs as mindless zombie work. …

大手筆,送¥1599的Apple AirPods Pro和獨家禮物等

大家好&#xff0c;我是若川。為感謝公眾號讀者們長久以來的支持&#xff0c;本次我聯合幾位前端界大佬給大家送超級福利了。除了聯合福利之外&#xff0c;每位前端大佬還帶了專屬禮品送給大家&#xff0c;所有抽獎均可重復參與、可重復中獎&#xff0c;詳情見下文每個公眾號的…

jQuery1.4新特性

1. 傳參給 jQuery(…) 之前&#xff0c;jQuery可以通過 attr 方法設置元素的屬性&#xff0c;既可傳屬性的名和值&#xff0c;也可以是包含幾組特定 屬性名值對 的 對象。在 jQuery 1.4 中&#xff0c;你可以把一個參數對象作為第二個參數傳給 jQuery 函數本身&#xff0c;同時…

python pack unpack_golang 仿python pack/unpack

package includesimport ("bytes""encoding/binary""fmt"_"os""strconv""strings")type Protocolstruct{Format []string}//封包func (p *Protocol) Pack(args ...interface{}) []byte{la :len(args)ls :len(p.Fo…

JavaScript遞歸應用與實踐

遞歸簡單來說就是函數內調用自生的一種方法&#xff0c;形如&#xff1a; function foo(){foo() } 復制代碼下面我列舉一些常用的遞歸應用。 1. 求和&#xff0c;例如求1234...100之和 分析如下&#xff1a; sum(100)sum(99)100 sum(99)sum(98)99 ... sum(1)sum(0)1 復制代碼代…

一個好的設計師_是什么讓一個好的設計師

一個好的設計師重點 (Top highlight)The design manager role has grown considerably over the past five years. As design has been recognised as a business value-driver and organisations have increased their design maturity, we’ve seen lots more design managem…

PHP-Redis擴展安裝 error: ext/standard/php_smart_str.h: No such file or directory

在源碼編譯PHP-redis擴展時&#xff0c;遇到缺少頭文件問題【問題描述】error: ext/standard/php_smart_str.h: No such file or directory 【問題原因】PHP安裝好的頭文件目錄&#xff1a;/php/include/php/ext/standard/&#xff0c;這些頭文件&#xff0c;在php7之前的版本&…