[問題] C/C++的new申請出來的記憶體位址保證對齊嗎?
http://blog.ez2learn.com/2009/02/03/data-alignment/
記憶體位對齊資料的存取會比較快
我記得以前記得好像看到有人的程式申請記憶體時會故意申請大一點的
然後再來進行位址對齊 只用對齊的位址當開頭
可是我總覺得我如果是寫c++的runtime 像是new我可能在設計時
就讓它傳回來的位址都是對齊好的
我寫了程式下去試
for(size_t i = 0; i < 100; ++i) {
char *p = new char[123];
if(reinterpret_cast<size_t>(p) % 4) {
cout << "*";
system("pause");
}
cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
short *p = new short[123];
if(reinterpret_cast<size_t>(p) % 4) {
cout << "*";
system("pause");
}
cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
float *p = new float[123];
if(reinterpret_cast<size_t>(p) % 4) {
cout << "*";
system("pause");
}
cout << reinterpret_cast<void *>(p) << endl;
}
system("pause");
我發現的確new出來都是對齊好的
但是我不敢確定 所以想請問一下
c++的new有保證對齊嗎? 我用的是Visual C++ Express 2008
還是雖然沒規定 但它的runtime實作保證對齊?
以上 謝謝
--
哇咧咧 創意投票系統 http://walele.com
易記學 程式設計教學 http://ez2learn.com/
易記學 程式設計討論區 http://forum.ez2learn.com
VICTOR's 個人Blog http://blog.ez2learn.com/
財報分析王 http://victorlin.serveftp.org/stock/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.156.83
推
02/03 20:46, , 1F
02/03 20:46, 1F
→
02/03 20:47, , 2F
02/03 20:47, 2F
推
02/03 20:49, , 3F
02/03 20:49, 3F
推
02/03 20:51, , 4F
02/03 20:51, 4F
→
02/03 20:51, , 5F
02/03 20:51, 5F
→
02/03 20:52, , 6F
02/03 20:52, 6F
→
02/03 20:52, , 7F
02/03 20:52, 7F
→
02/03 20:52, , 8F
02/03 20:52, 8F
→
02/03 21:58, , 9F
02/03 21:58, 9F
→
02/03 22:18, , 10F
02/03 22:18, 10F
→
02/03 22:18, , 11F
02/03 22:18, 11F
→
02/04 23:03, , 12F
02/04 23:03, 12F
→
02/04 23:03, , 13F
02/04 23:03, 13F
→
02/04 23:04, , 14F
02/04 23:04, 14F
→
02/04 23:05, , 15F
02/04 23:05, 15F
→
02/04 23:05, , 16F
02/04 23:05, 16F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章