看板 C_and_CPP 關於我們 聯絡資訊
可以請教一下 這是為什麼嗎? 我用Devc++跑 值還是正確 register都是4bytes 有人推文說local variable會做stack 所以這是因為compiler在這時候知道做stack時 sb(store byte)要改成用sw(4bytes) 故不會出錯? 我一直以為會truncate.... ※ 引述《yshihyu (yshihyu)》之銘言: : windows 記憶體管理機制是不是沒 linux 好? : 明明程式誤用不合法記憶體區塊,還是可以跑沒有出現警告 , 但linux 可以偵測到 : #include <stdio.h> : int main() : { : char a = 10; : int *p = (int*)&a; : *p = 342234; : return 0; : } : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.138.66.163
yshihyu:這跟 local variable 沒關係 @@ 03/21 18:47
yshihyu:這應該是OS 記憶體機制問題.. 03/21 18:48
sunneo:其實就算寫入也不會truncate 03/21 23:44
sunneo:你頂多是寫到下面的int*p 的記憶體內容 也就是改到了 03/21 23:45
sunneo:p指的位址 除非你再嘗試deref p 可能會到不一樣的位置 03/21 23:45
VictorTom:這個case如果有做記憶體對齊, 會不會恰好沒事啊?? 03/22 01:11