日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于内存对齐

發(fā)布時間:2025/7/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于内存对齐 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

??? 曾經(jīng)接手一個網(wǎng)絡(luò)視頻監(jiān)控程序,主要是上層軟件通過發(fā)送控制指令獲取網(wǎng)絡(luò)視頻板的視頻數(shù)據(jù)和控制網(wǎng)絡(luò)視頻板,這應(yīng)該是一個比較簡單的流程!

一切的開發(fā)都很順利,測試的時候,問題就來了,獲取視頻數(shù)據(jù)流的數(shù)據(jù)竟然是錯誤的,我糊涂了,把整個程序流程,用調(diào)試器一步一步地跑,到了發(fā)送視頻指令的時候,返回指令操作錯誤的結(jié)果,怎么回事?
我是按照視頻的操作指令封裝的數(shù)據(jù)包,內(nèi)存顯示數(shù)據(jù)包的內(nèi)容是沒有錯誤的,就是一個晚上,我不停地找"錯誤",只有偶然,我把sizeof()這個指令直接換掉,把數(shù)據(jù)包全部用一個BYTE的數(shù)據(jù)進(jìn)行copy,程序成功執(zhí)行!這時,我已經(jīng)快暈了!
數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)板的數(shù)據(jù)包大小根本不是實(shí)際控制數(shù)據(jù)包的大小!
這時我才想起一個人, Stanley B. Lippman,他寫的那一本書 "Inside object modale", 曾經(jīng)提過這樣的事情,編譯器為了提高CPU的效率,會對struct 的結(jié)構(gòu)進(jìn)行優(yōu)化,利用sizeof 可以得出不同的計(jì)算機(jī)上對 struct 的結(jié)構(gòu)優(yōu)化后的大小值.以前是看過,但是,卻沒有深刻理會,現(xiàn)在,吃了苦頭,才明白!
這是我的理解,C++ 編譯器為了使CPU的性能達(dá)到最佳,會對 struct 的內(nèi)存結(jié)構(gòu)進(jìn)行優(yōu)化,這是為了達(dá)到CPU數(shù)據(jù)傳輸總線的吞吐值,各個計(jì)算機(jī)的數(shù)據(jù)傳輸總線是不一樣的,如32位的計(jì)算機(jī)的數(shù)據(jù)傳輸值是4 bytes,64位計(jì)算機(jī)數(shù)據(jù)傳輸是8 bytes,這樣,struct 在默認(rèn)的情況上,編譯器會對 struct 的結(jié)構(gòu)進(jìn)行數(shù)據(jù)對齊((32位機(jī))4的倍數(shù)或(64位機(jī))8的倍數(shù)),如下面這段代碼所示:
#include typedef struct tagPACKAGE {int intValue;char chValue1;char chValue2; } PACKAGE, * LP_PACKAGE;int main() {PACKAGE package;std::cout << "sizeof( package ) = " << sizeof( package ) << std::endl;return 0; }

程序執(zhí)行結(jié)果為 8 ( sizeof( int ) + sizeof( char ) + sizeof( char ) + 對齊值 )為8. (我的機(jī)子是32位,4*2=8)一切都是編譯器搞得自已頭暈,但是為什么以前自已寫的網(wǎng)絡(luò)程序沒有這種情況?同樣的數(shù)據(jù)包傳輸,我并沒有阻止編譯進(jìn)行強(qiáng)制對齊,我猜可能是操作系統(tǒng)都是一樣(都是WinX系統(tǒng))的才沒有出現(xiàn)問題,而現(xiàn)在的網(wǎng)絡(luò)視頻板是內(nèi)嵌式linux,對數(shù)據(jù)包的處理是純數(shù)據(jù)(不經(jīng)對齊的數(shù)據(jù))是敏感的所以,才會出現(xiàn)這樣的問題!這種情的解決方法是阻止編譯器對數(shù)據(jù)包對齊,因?yàn)閿?shù)據(jù)對齊的時候,編譯器會塞入一些沒有意義的數(shù)據(jù)對結(jié)構(gòu)進(jìn)行對齊,使用#pragma 強(qiáng)制編譯器產(chǎn)生指定數(shù)據(jù)對齊方式,如下代碼所示
#pragma pack(push) #pragma pack(1) typedef struct tagPACKAGE {int intValue;char chValue1;char chValue2; } PACKAGE, * LP_PACKAGE; #pragma pack(pop)typedef struct tagPACKAGE2 {int intValue;char chValue1;char chValue2; } PACKAGE2, * LP_PACKAGE2;int main() {PACKAGE package;PACKAGE2 package2;std::cout << "sizeof( package ) = " << sizeof( package ) << std::endl;std::cout << "sizeof( package2 ) = " << sizeof( package2 ) << std::endl;return 0; }

對指定的數(shù)據(jù)包編譯時進(jìn)行內(nèi)存對齊,這樣,也不會讓編譯器對其數(shù)據(jù)進(jìn)行優(yōu)化!
總結(jié):
C++的編譯器總是在背后做了很多事!網(wǎng)絡(luò)數(shù)據(jù)處理或與內(nèi)嵌式設(shè)備打交道的時候,這更應(yīng)該小心!

轉(zhuǎn)載于:https://www.cnblogs.com/javaspring/archive/2012/04/13/2656151.html

總結(jié)

以上是生活随笔為你收集整理的关于内存对齐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲男人的天堂在线观看 | 大尺度叫床戏做爰视频 | 中文字幕一区二区三区在线观看 | 国产一国产精品一级毛片 | 日本一区二区三区四区五区 | 国产香蕉一区二区三区 | 伊人导航 | 精品久久一区二区三区 | 国产成人手机在线 | 久热青草 | 天天干夜夜夜 | 亚洲av成人无码一二三在线观看 | 欧洲av一区二区三区 | 男女互操视频 | 人人干干人人 | 国产午夜无码视频在线观看 | av在线资源站 | 中文字幕av专区 | 大地资源在线观看免费高清版粤语 | 亚洲高清无码久久 | 麻豆视频免费版 | 美女激情网 | 国产福利91精品一区二区三区 | 亚洲av高清一区二区三区 | 超黄网站在线观看 | 亚洲一区二区三区高清视频 | 99热99re6国产在线播放 | 免费在线观看a级片 | 3d动漫精品啪啪一区二区三区免费 | 在线免费观看毛片 | 欧美黑人xxx| yjizz国产 | 亚洲成a人片77777kkkk | 永久免费汤不热视频 | 欧美爽爽爽 | 欧美天堂在线 | 香港三级韩国三级日本三级 | 999精品国产| 三女警花合力承欢猎艳都市h | 国产精品人八做人人女人a级刘 | 亚洲最大看欧美片网站 | 四虎影视免费看 | 欧美成人三级 | 日皮视频免费看 | 亚洲精品国产综合 | 日韩av有码 | 亚洲成人精品一区二区三区 | 日韩欧美麻豆 | 国产日韩欧美一区二区 | av国产成人| 日韩av大片 | 成人黄色录像 | 日韩网 | 综合五月网 | 欧美一区2区三区4区公司 | 日韩av不卡在线观看 | 午夜电影天堂 | 爆操巨乳| xnxx国产 | 一级淫片免费看 | 日韩一级中文字幕 | 色图18p | 成人黄色一区二区 | 看av网| 中文字幕午夜 | 性中国xxx极品hd | 精品产国自在拍 | 天天射av| 欧美aa在线 | 成人羞羞在线观看网站 | 亚洲三级色 | 国内成人免费视频 | 国产日产精品一区二区三区 | 孕妇疯狂做爰xxxⅹ 国产精品乱码久久久久久 99久久久成人国产精品 | 熟妇人妻中文av无码 | 国产最新在线 | 中文字幕精品在线 | 国产91免费观看 | 两性动态视频 | 亚洲伦理精品 | 成人av资源| 美国免费高清电影在线观看 | 久久久久亚洲色欲AV无码网站 | 91日韩中文字幕 | 久久夜色av | 美女免费黄视频 | 久久网一区二区 | 91视频观看| 动漫精品一区一码二码三码四码 | 借种(出轨高h) | 久久99精品久久久久久琪琪 | 免费av福利 | 中文字幕在线不卡视频 | 99久久人妻无码精品系列 | 中文在线永久免费观看 | 女同久久另类69精品国产 | 国产激情精品一区二区三区 | 天天夜夜啦啦啦 | www.欧美激情 |