Re: [問題] 面試考題 程式最佳化

看板C_and_CPP作者 (貓貓最乖了)時間13年前 (2011/06/16 02:55), 編輯推噓6(6026)
留言32則, 9人參與, 最新討論串10/10 (看更多)
※ 引述《littleshan (我要加入劍道社!)》之銘言: : 注意 a/24 > b 不可以改成 a > b*24 或 a/8 > b*2+b : 因為 b 在乘法運算後可能溢位,導致比較結果不正確 除了溢位問題以外,可能還有以下幾個常見問題: (1) 沒有人保證 unsigned (int) 寬度剛好是 32 位元,要玩弄位元請用 uint32_t. C99 標準(草稿 n1256 版)只有說 UINT_MAX 至少是 65535 (2^16-1). 目前流行的的編譯器+作業系統+處理器(LP64/LLP64 資料模型)int 都用 32 位元沒錯,但別忘了以前 16 位元橫行的時代恐怕只有 16 位元,而比較不流行 模型中可能也只有 16 位元。誰知道以後趨勢會不會又改了呢?ILP64 中 int 是 64 位元,而且也有人用。 (2) 整數除法問題。25/24 > 1 不成立,但 25 > 1*24 成立。就算沒溢位也錯。 : 結論:除非這家公司只能用特定平台的老舊 compiler,或是自己就在寫 compiler : 否則他們的 code 可能充滿 << >> 之類的位元運算, : 不但沒比較快,還要小心莫名奇妙的 bug : 建議原 po 仔細考慮一下再決定要不要去 非常同意結論!莫名其妙的 bug 包括未來資料模型一改(例如 ILP128 xD)可能馬上 又要重寫了。現在常見的編譯器一定會做一些基本的最佳化,實在沒必要為了這種東西花 時間,甚至讓程式碼更難讀懂...。 === 講一些比較有建設性的東西好了。Hacker's Delight 這本書有很多使用位元運算技巧 的程式碼可以參考。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.39

06/16 03:03, , 1F
int 在理論上 不是與作業系統 同位元嗎?
06/16 03:03, 1F
「理論上」沒有任何關係;「實際上」在 AMD64 架構下,在 Windows 和大部分 *nix 中 常見的編譯器(好繞口)裡面的 int 都是 32 位元。「通常」只寫幾位元是代表指標、暫存器 等等有幾位元,是一個用來粗略描述處理器架構的一個方法,而不是 int 佔幾位元。不過這也 只是「通常」而已...

06/16 03:03, , 2F
是微軟開了惡例 讓int = long的吧
06/16 03:03, 2F

06/16 03:04, , 3F
話說回來為何 gcc也跟進啊?
06/16 03:04, 3F
恐怕 int 原本就跟處理器的能力沒有直接關係,不過你說 gcc 跟進是指?你用的處理器 架構和作業系統是什麼呢?

06/16 03:14, , 4F
EM64的ptr也是64位? 那插超過4G內存不就不能定位了
06/16 03:14, 4F

06/16 03:14, , 5F
講錯 也是32位? 是64吧
06/16 03:14, 5F
我猜你是說 EM64T. 指標大小和 int 大小恐怕一點關係也沒有。適合存指標的整數型態, 根據 C99 標準(n1256),是 intptr_t 或 uintptr_t, 不是 int 或 unsigned int. ※ 編輯: Favonia 來自: 140.112.30.39 (06/16 03:32)

06/16 04:10, , 6F
@DrStein: int 位元數問題之前有三個人發過三帖討論.
06/16 04:10, 6F

06/16 04:10, , 7F
#1DyGJ9Oy #1DyHaTxh #1DyP_lam 這和系統有關.看看吧.
06/16 04:10, 7F

06/16 04:11, , 8F
補個完整的,確實該翻翻spec如何規定,也看看系統為佳.
06/16 04:11, 8F

06/16 04:14, , 9F
並注意到,第一篇提到了,"int 大小未必就是CPU位元數"
06/16 04:14, 9F

06/16 04:32, , 10F
XD
06/16 04:32, 10F

06/16 08:31, , 11F
我覺得面試的考題, 有時候並不需要直接搬出大家心中最正
06/16 08:31, 11F

06/16 08:32, , 12F
確又漂亮(簡短?)的答案.
06/16 08:32, 12F

06/16 08:32, , 13F
如何表達出答題者考慮到哪些因素(如本篇),也是在展現
06/16 08:32, 13F

06/16 08:33, , 14F
solver 的能力與價值.
06/16 08:33, 14F

06/16 08:38, , 15F
不認同樓上的想法
06/16 08:38, 15F

06/16 08:40, , 16F
大部分科技公司都沒認真想有用的考題,總是一味抄冷門
06/16 08:40, 16F

06/16 08:41, , 17F
又看似很深奧的題目,這樣真的好嘛?還是有飯碗較重要
06/16 08:41, 17F
※ 編輯: Favonia 來自: 140.112.30.39 (06/16 08:49)

06/16 09:43, , 18F
考題就那幾個常出,重點在怎麼答.
06/16 09:43, 18F

06/16 09:48, , 19F
說不定有些公司的正確答案是「交給編譯器最佳化就好XD」
06/16 09:48, 19F

06/16 09:52, , 20F
= =這個答案更不認同
06/16 09:52, 20F

06/16 10:17, , 21F
我倒覺得超哥的答案蠻有道理的
06/16 10:17, 21F

06/16 13:17, , 22F
超哥是誰?
06/16 13:17, 22F

06/16 14:02, , 23F
超哥是誰? +1
06/16 14:02, 23F

06/16 14:03, , 24F
好人超 james732 簡稱超哥
06/16 14:03, 24F

06/16 14:36, , 25F
james732真的是好人(發卡)
06/16 14:36, 25F

06/16 14:54, , 26F
好人超的好人卡已經可以拿來組遊戲王卡牌了 不差這麼一張
06/16 14:54, 26F

06/16 15:04, , 27F
傻眼@@"
06/16 15:04, 27F

06/16 15:04, , 28F
集個搭羅牌組,不是更好
06/16 15:04, 28F

06/16 16:30, , 29F
............幹嘛這樣
06/16 16:30, 29F

06/16 19:10, , 30F
結束這個回合。
06/16 19:10, 30F

06/16 20:02, , 31F
< 啟動桌上覆蓋的陷井卡 "好人的召換" >
06/16 20:02, 31F

06/16 21:35, , 32F
結果樓上變成好人2
06/16 21:35, 32F
文章代碼(AID): #1D-G0KM- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1D-G0KM- (C_and_CPP)