看板 C_and_CPP 關於我們 聯絡資訊
大家好 經過版友推薦 開始看程式設計師的自我修養 目前只看完第一章 等於是在複習OS... 我有一些疑問 想提出來討論 1. virtual memory 在"非"share memory, 兩process溝通的情況下 他書上是講 process能見的virtual memory都是獨立的 但從前到現在都有聽到說 你指標若存取到非法的記憶體位址 有可能會改到別的process的值?? 請問這是有可能的嗎? 之前是沒想過這句話是否有誤 還是這個講法是錯的 應該是說妳指標存取到非你new的memory 位址 有可能會改到"自己process"其他變數的 value? 但是常常會有人提到heap corruption 你存取超過你new的空間 並不會"立即"的crash... 若只是單純改到自己process的其他變數的value, 頂多邏輯上出錯, 而不是發生 exception 導致crash.. 而且為啥不是"立即"出錯, 到底OS是怎麼判定你這一次的存取非法記憶體才是該發出 exception的呢? 我不知道這邊觀念到底錯在哪裡 若無法改變其他process的value, 那那些hacker是如何寫那些精妙的程式呢.... 2. 他在書上p28頁 有舉出最佳化的問題 但29頁那邊 他提到加上volatile 可以做到兩件事情 但馬上又補一句 "可見volatile可以完美的解決第一個問題" 讓我不知道他在講啥了, 看到後面....他也沒提出解法 反倒是提出 有些寫法看似沒問題卻是有淺在風險.....但還是沒講怎麼解... 主要的問題在 如果我們無法阻止編譯對指令做重排 那該怎麼辦 我寫的程式碼問題百出阿 = = 他提30頁提到的barrier 說真的我從沒看過跟用過.... 這是硬體support的嗎? 若沒support不就是沒有救了.... 再多執行緒的情況下 程式怎麼才能夠寫的完美.... 這邊看得很迷糊 想請了解的版友提供一些想法 3. 他在書上p.27 也提到兩個東西 一個是 Read-Write-Lock 和 Condition Variable. 我找了許久 我是針對windows平台再survey, 我看不出個所以然= = 先講到conditional variable http://msdn.microsoft.com/en-us/library/windows/desktop/ms686903(v=vs.85).aspx 我看範例 我覺得我可以用event 和 CriticalSection Object就可以模擬了 是什麼情況再要用到這個conditional variable http://msdn.microsoft.com/en-us/library/windows/desktop/ms686301(v=vs.85).aspx 針對這個API 的描述 releases the specified critical section as an "atomic operation". 我更是疑惑 他指的atomic operation是哪一個動作需要保證一次做到底? 若不是atomic 會怎麼樣呢....... 至於R/W lock... 我找不到win32相關的資料 似乎這是一個技術 看你要怎麼實作?? 看到的都是C#提供的API之類的 許多疑問 煩請各位 提出一些意見 討論看看 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222
purpose:作業系統有提供 API 函數,可以開啟其他行程的記憶體 03/02 17:47
purpose:其他的自己用 VMMap 觀察,加 google 查資料就能解決 03/02 17:49
Bencrie:改到別的 process的內容,x86 real-mode 會發生 XD 03/02 19:51
Bencrie:存取超過你 new 的也不見得一定每次都 segfault 03/02 19:52
loveme00835:我也有問題, 你為什麼有問題都在C++板問? 03/02 23:11
purpose:其實只是因為人多吧,其實原PO根本很少用C++吧,呵呵 03/02 23:17
QQ29:不然該潑在哪呢? 03/02 23:45
troylee:因為 new 有時後會要五毛給一塊 03/02 23:47
final01:ptt沒有system programming版 你只能找stack overflow摟Y 03/03 00:02
legendmtg:有CSSE版 不過快廢了.... 03/03 01:08
cobrasgo:這個講清楚要花不少時間,實在是沒動力打一篇… 03/03 15:50