作者legnaleurc (CA)
看板C_and_CPP
標題Re: [討論] 面試有鑑別度的問題??
時間Tue Jan 8 16:22:49 2013
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: L大你好
: 看完你的文章有些地方想請教
: 因為沒這方面觀念也不太知道你講的含意
: =====================================
: 3. 過 multithread 會爆炸
: 你要在 thread 邊界接下來
: =====================================
: 不太了解什麼叫做thread邊界?
一般來說是你拿來 join thread 的 function
或是 Thread::run 之類的成員函式
: ======================================
: 4. C++ 的 ABI 沒有標準
: 所以你可能要在 module 邊界接下來轉成 error code
: ======================================
: 不太了解什麼叫做model邊界, 以及ABI 我查了一下相當的抽象, 有沒有比較好理解的解
: 釋呢?
比方說你包了一個 lib.h 和 lib.dll 給別人用, 這個 lib.h 裡提到的所有東西
就是 module 邊界, 你神聖不可侵犯的領土
ABI 嘛 ... 最簡單的例子是 name mangling
C 沒有 overload, member function, namespace 這些東西
所以 void f() 在 linker 就是叫 f, 沒什麼好混淆的
(有可能會因為 calling convention 更動, 細節我忘了)
但是在 C++, 為了在 linker 分辨這些東西
同樣的 function 在 gcc 4.x 叫 _Z1fv
在 Visual C++ 10 叫 ?f@@YAXXZ
compiler 改版之後也可能會改命名規則
就算是號稱 ABI 相容的 clang 和 gcc, 我也有發生過 crash 在某個
不知名 frame stack 裡過
: ======================================
: C++ 的 memory model 其實沒考慮到 thread
: 所以如果在進入 multithread 之後才想要初始化
: 那祝你好運 :)
: ======================================
: 不太懂甚麼叫做進入後才初始化耶@@
: 是說開一條thread
: 在thread裡面呼叫getInstance做第一次的初始化
: 這樣有可能會造成main thread跟這條 thread沒有做好sync 造成getInstance那部出問題
: ?
正解
C++ 在這裡出的包可大了
: 另外~~
: 想請問 exception 發生時會讓程式的performance變很差的根本原因是什麼呢?
: 看到一些比較淺的文章都是在用程式去測performance
: 結論是exception 沒發生的話 效率是近乎一樣
: 但exception發生 會效率很差
: 不太了解 root cause~
: 謝謝
嗯, 通常是因為寫的人亂丟 exception (誤)
stack unwinding 中 compiler 會插很多 code
所以變慢是可以理解, 但是變很慢, 個人偏見是誤用
比方說在 for 裡不停 throw 又不停 catch 之類
--
自High筆記(半荒廢)
http://legnaleurc.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.53.41
推 azureblaze:簡單講exception是例外 常常發生就不是例外了 01/08 16:53
推 Bencrie:常常發生一定是 feature 不然就 spec XD 01/08 20:18
→ MOONRAKER:是event |D 以前有聽過exception當event用 :D 01/08 21:33
→ final01:115...以為是113的 XD 01/08 23:22
推 QQ29:了解! 不過thread join那些 就算發生exception也catch不到吧? 01/09 11:14
→ QQ29:要在thread 的 body裡面 做try catch? 還是有別的方法 01/09 11:15
→ devilphoenix:exceptions要麼是要你採取動作回復程序狀態,要麼是 01/09 11:24
→ devilphoenix:要麼是讓你安全退出……所以要看具體問題,問題的 01/09 11:24
→ devilphoenix:本質並不因為它是個c++ exception而改變,重要的是 01/09 11:25
→ devilphoenix:你程序本身的異常處理邏輯。thread內catch住,然後 01/09 11:26
→ devilphoenix:該咋辦咋辦,對不起我是東北人 2333 01/09 11:26
→ legnaleurc:我覺得 QQ29 誤會了, 不是 pthread_join, 是你拿給 01/09 17:23
→ legnaleurc:pthread_join 的那個 function 要 catch(...) 01/09 17:23