Re: [問題] 程式設計的自我修養 Ch.1 疑問

看板C_and_CPP作者 (藍影)時間13年前 (2012/03/02 12:00), 編輯推噓2(206)
留言8則, 4人參與, 最新討論串2/5 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 1. virtual memory : 在"非"share memory, 兩process溝通的情況下 : 他書上是講 process能見的virtual memory都是獨立的 他講的是對的。 : 但從前到現在都有聽到說 : 你指標若存取到非法的記憶體位址 有可能會改到別的process的值?? 我想你誤會文中之意,或別人是真的寫錯。 virtual memory 開出來後,有些是給 kernel 用的, 有些才是存放程式所需記憶體,「非法」指的是在 virtual memory 開出來之後, 有些 address 是不能修改,甚至不能讀取,但光就「指標」而言, 是不會改到其他 process address value。 : 但是常常會有人提到heap corruption : 你存取超過你new的空間 並不會"立即"的crash... : 若只是單純改到自己process的其他變數的value, 頂多邏輯上出錯, 而不是發生 : exception 導致crash.. : 而且為啥不是"立即"出錯, 到底OS是怎麼判定你這一次的存取非法記憶體才是該發出 : exception的呢? 這個去念 OS 可能好點吧? : 我不知道這邊觀念到底錯在哪裡 : 若無法改變其他process的value, 那那些hacker是如何寫那些精妙的程式呢.... 簡單的方式是一系列 api 的呼叫, OpenProcess、ReadProcessMemory、QueryMemory、 WriteProcessMemory、CloaseHandle。 : 2. 他在書上p28頁 有舉出最佳化的問題 : 但29頁那邊 他提到加上volatile 可以做到兩件事情 你誤會它的意思了。先從「優化」談起。 compiler 優化 一個是 lazy evaluation, lazy evaluation 簡單但不完全正確的說, 如果在運算過程中需要先計算大量的 tmp[] 去計算 rst[], 若去求 tmp 沒有切迫性的需要時,compiler 開優化後, 有權可以調整求 tmp 之順序 (是一連串的指令),也可以是等到需要求 rst 時 再去計算 tmp, (這動作看起來似乎沒什麼,但有時候效能就是會快些) 然而你開了 volatile 之後,和該 variable 相關的就不會進行先後順序之調整。 故 volatile 能更動的只是 instr. re-range,而不是 thread re-range. 另一 compiler 優化是較為常人所知,過程中如果有 garbge variable, 會企圖去消掉 garbge variable,這也是為何 vc 在 release mode 下, 下斷點後,卻找不到某個變數之原因,因該變數被 opt. 掉。舉個例 int a, b, c; a = b; c = b; c = a + 1; printf("c = %d\n", c); 最後優化之結果可能是 int c; ++c; printf("c = %d\n", c); 上面的 a, b 都被優化掉。 volatile 保證的是這二個。 : 但馬上又補一句 "可見volatile可以完美的解決第一個問題" 我看他上下文的意思,不能解決的是和 multi-thread 扯上關係的, 意思是 thread 開出來後,你不能確定哪一個 thread 會先做、後做, 甚至不能保證 thread 下一個會切到哪,這和 instr. re-range 意義不同。 : 讓我不知道他在講啥了, 看到後面....他也沒提出解法 他提的作法不就在 p30 頁提出來了嗎?使用 CPU 提供之相關 barrier 指令。 : 如果我們無法阻止編譯對指令做重排 阻止指令重排用 volatile; 但 volatile 不可限定 thread 順序。 : 他提30頁提到的barrier 說真的我從沒看過跟用過.... : 這是硬體support的嗎? 他在 p30 中後段不是說了嗎? 許多架構 CPU 都提供 barrier 指令,不過名稱各不相同 : 3. 他在書上p.27 也提到兩個東西 一個是 Read-Write-Lock 和 Condition Variable. 這點你有興趣的話,還是去看本 multi-thread 之類的書或好一點的教學文, 我沒力再講。 -- 我知道 ~ 但別說出來 , 說出來讓人感到特別難過... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.165.40

03/03 09:05, , 1F
原po應該沒接觸過OS和multi-process和multi-thread
03/03 09:05, 1F

03/03 09:06, , 2F
建議可以買恐龍本來看看
03/03 09:06, 2F

03/03 20:38, , 3F
好人卡(遞)
03/03 20:38, 3F

03/03 20:38, , 4F
原po一次問了太多的問題,叫我一次講完實在是沒動力…
03/03 20:38, 4F

03/03 23:20, , 5F
@@ 抱歉 因為我看完第一章節 就一堆小疑問...再看下去
03/03 23:20, 5F

03/03 23:20, , 6F
感覺會很慘....高深的書籍
03/03 23:20, 6F

03/04 10:26, , 7F
看書底那個紅條就知道了, 如果有很多東西看不懂, 你需要
03/04 10:26, 7F

03/04 10:26, , 8F
的是先把入門打好再回來, 而不是針對內容一個一個問...
03/04 10:26, 8F
文章代碼(AID): #1FKBPb4u (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FKBPb4u (C_and_CPP)