[問題] 請問記憶體測試

看板C_and_CPP (C/C++)作者 (CATWILLFLY)時間16年前 (2009/07/14 00:55), 編輯推噓15(15023)
留言38則, 9人參與, 最新討論串1/1
請問一下 我要測試實體記憶體 不知道這樣寫法觀念是否正確 main() { int pattern=0xAAAAAAAA; int* pDest = 0x100; int* pEnd = 0x30000; //寫VALUE進去 do{ *pDest = pattern; } while (++pDest < pEnd); pDest =0x100; //看看讀出來對不對 do{ if(*pDest != pattern) break; } while (++pDest < pEnd); } 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.241.21

07/14 00:57, , 1F
首先會遇到的應該是保護模式問題吧…?
07/14 00:57, 1F

07/14 01:02, , 2F
int* pDest = 0x100;會過嘛? 要轉個型吧
07/14 01:02, 2F

07/14 01:47, , 3F
轉什麼型?
07/14 01:47, 3F

07/14 02:00, , 4F
我猜*pDest = pattern這行就會死了吧
07/14 02:00, 4F

07/14 02:24, , 5F
在保護模式的Windows下應該就等著報error了沒錯....
07/14 02:24, 5F

07/14 02:25, , 6F
不過真實模式, 甚至是其他device的話應該能work吧??
07/14 02:25, 6F

07/14 02:27, , 7F
話說, 這種用途加volatile關鍵字會不會比較好呢@_@"
07/14 02:27, 7F

07/14 07:34, , 8F
int *pDest=(int*)0x100;不過下面對他dereference應該就gg了
07/14 07:34, 8F

07/14 09:57, , 9F
加個 volatile 比較安全些
07/14 09:57, 9F

07/14 11:02, , 10F
加個 volatile 只是不 optimize, 跟安全無關吧
07/14 11:02, 10F

07/14 11:03, , 11F
因為它目的要測試記憶體, optimize 掉就達不到效果了
07/14 11:03, 11F

07/14 11:24, , 12F
我的意思是, 加不加 volatile 都無法解決根本的 access
07/14 11:24, 12F

07/14 11:24, , 13F
violation 的問題啦~
07/14 11:24, 13F

07/14 11:25, , 14F
另外, 把資料寫進 memory 有什麼被 optimize 掉的風險嗎? XD
07/14 11:25, 14F

07/14 11:26, , 15F
他可還有讀出來呢~
07/14 11:26, 15F

07/14 11:26, , 16F
哈哈原來如此, 因為預期他在 real mode... lol
07/14 11:26, 16F

07/14 11:28, , 17F
只要在外部不可見的都可能被 optimize
07/14 11:28, 17F

07/14 11:28, , 18F
內部讀出來並沒有可見的使用, 就有風險
07/14 11:28, 18F

07/14 11:29, , 19F
但剛實測了一下, 還是會寫
07/14 11:29, 19F

07/14 11:33, , 20F
請問樓上 怎麼讓他不會 違規存取呢? 我用VC寫都會error...
07/14 11:33, 20F

07/14 11:36, , 21F
另外也想問 E大所謂的外部不可見 和內部 所描述的是甚麼意思
07/14 11:36, 21F

07/14 14:07, , 22F
1. 真實模式 2. 函數內外
07/14 14:07, 22F

07/14 19:12, , 23F
對記憶體單純寫入後讀出的動作, 有可能直接被opt為暫存
07/14 19:12, 23F

07/14 19:12, , 24F
在reg或是直接從cache拿, 用volatile則保證memory的r/w
07/14 19:12, 24F

07/14 19:14, , 25F
一定要確實去做; 只是因為原po的case記憶體r/w的範圍也
07/14 19:14, 25F

07/14 19:15, , 26F
不小, 所以遇上被reg cache起來的機會比較低一些....
07/14 19:15, 26F

07/14 19:16, , 27F
第二推有點錯, 應該跟cache無關, 而是直接省略mem的r/w
07/14 19:16, 27F

07/14 19:16, , 28F
只用reg這樣; 至於mem access violation的問題, 就看
07/14 19:16, 28F

07/14 19:17, , 29F
原po要怎麼處理real mode的問題, 小弟也好奇想要學習XD
07/14 19:17, 29F

07/15 01:13, , 30F
請問什麼是real mode啊?
07/15 01:13, 30F

07/16 22:01, , 31F
Windows下沒機會測到真正記憶 測到的都是OS定給你的 OS還會
07/16 22:01, 31F

07/16 22:02, , 32F
再轉換 還有很多記憶體位置 OS是做很多其他事的 不可能讓你
07/16 22:02, 32F

07/16 22:04, , 33F
亂搞 要測真正記憶體每個BIT要去DOS下 或是BIOS才有可能
07/16 22:04, 33F

07/16 22:29, , 34F
要能windows下測 除非你真的很知道微軟OS搞啥把戲 還有知道
07/16 22:29, 34F

07/16 22:31, , 35F
別人不知道的方法 免錢MSDN不用查 查不到的 要錢的MSDN還不
07/16 22:31, 35F

07/16 22:32, , 36F
一定有方法
07/16 22:32, 36F

07/17 01:19, , 37F
Win在過去可以透過 \Device\PhysicalMemory 讀寫實體記憶
07/17 01:19, 37F

07/17 01:20, , 38F
很舊的技術了
07/17 01:20, 38F
文章代碼(AID): #1AMsSEFG (C_and_CPP)
文章代碼(AID): #1AMsSEFG (C_and_CPP)