[問題] 如何學習增進效率的知識與技術?

看板C_and_CPP作者 (宇宙學型男)時間7年前 (2017/04/06 00:10), 7年前編輯推噓13(13033)
留言46則, 15人參與, 最新討論串1/1
大家好 晚輩非本科系畢業 有幸在一間小軟體公司工作了一陣子後 深深覺得自己相關底層知識不足 所以上來請教如何增進該方面的知識 公司做的東西與電腦圖學 互動多媒體開發有關 都是用c++ 不用直接回答我下面的問題 我比較傾向告訴我方面 然後讓我往正確的方向找資料 現在感覺是自己不知道找資料的方向正確與否導致浪費很多時間 1. 記憶體問題 struct A { char a; int b; } 請問sizeof(A)是多少? 我後來才知道有alignment這東西 可是這些重要的東西為何在一些c++的書(螞蟻書)都沒提到 還是我沒注意到有這東西 為什麼記憶體特別要對齊 他對整個程式的運作影響到底是什麼? 另外在字串的一些處理 公司人告訴我盡可能避免使用strdup or strcmp之類的東西 因為在電腦內部要花額外的時間處理記憶體的東西(有這回事?) 我以為只有寫個迴圈比較每個字母 所以我們做法是把字串Hash成一個數字 用單純數字來比較字串是否一樣 所以這樣比較快? 但是我們在做Hash這些步驟的時候難道花的時間沒有直接叫strdup這些來得多嗎? 2. 演算法計算? 因為在處理圖學的東西要處理大量的向量計算 例如我們都知道向量長度是每個方向的量平方開根號 例如有次我要比較一些向量長度 我這麼做完以後 公司的人告訴我 其實比較長度的時候平方完直接比較就可以了 而不用脫褲子放屁再去開根號 浪費很多時間 (我猜這邊應該只是純粹數學 是我自己笨) 但是以後維護的人不會去想為什麼這邊不用開根號嗎? 另外有提到除法與減法的operator比乘法跟加法慢? 為什麼一樣對我們人類來說簡單的算數 在電腦上會有速度上的差異? 這些差異到底是什麼造成的? 大概類似是這樣的問題 請問要從哪個方向找資料或書去精進呢 (如果有推薦的書的話) 自己是數理類科系畢業 沒有太多工程背景 對於c++領域只是新手 自己看了C++的書好像也沒有講到類似的東西 我知道現在電腦其實都很快 根本感受不到這些計算的差異 但是因為主要開發高效能的一些軟體 所以任何一點的記憶體(效能)都不能浪費 希望版友能多給予我一些方向 謝謝 如有任何問題請發問 我會盡可能回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.202.190.56 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1491408626.A.0D1.html

04/06 00:18, , 1F
系統程式 計組 再往後面是cpu設計 編譯器設計
04/06 00:18, 1F

04/06 00:19, , 2F
然後第一個 我記得螞蟻有阿...
04/06 00:19, 2F

04/06 00:30, , 3F
你的懷疑是對的,只是兩邊都半桶水,導致一堆謠言互傳 XD
04/06 00:30, 3F

04/06 00:32, , 4F
根號學成庚號我真的應該吐槽一下,免得以後你又丟一次臉
04/06 00:32, 4F

04/06 00:33, , 5F
畢竟錯種字很容易讓人把你印象分數打到剩下三折
04/06 00:33, 5F
※ 編輯: Cosmology (98.202.190.56), 04/06/2017 00:41:04

04/06 00:41, , 6F
已修正 謝謝
04/06 00:41, 6F

04/06 04:06, , 7F
計組和OS拿來看吧
04/06 04:06, 7F

04/06 04:10, , 8F
另外第一個部分我記得有個老外說是不一定,但不確定他說
04/06 04:10, 8F

04/06 04:10, , 9F
的對不對,等等找到網址再放上來
04/06 04:10, 9F

04/06 05:40, , 10F
根號講的沒錯啊 而且速度有差吧
04/06 05:40, 10F

04/06 05:41, , 11F
Hash 那邊 你只有要比一次還是未來也有要比?
04/06 05:41, 11F

04/06 09:04, , 12F
你hash碰撞的時候,還是全部都要比阿。難道你的hash
04/06 09:04, 12F

04/06 09:05, , 13F
function有辦法不碰撞?我猜是不可能啦
04/06 09:05, 13F

04/06 09:06, , 14F
除非你的string有點特殊,不然都會碰撞
04/06 09:06, 14F

04/06 09:09, , 15F
其實你的問題就是資工系在學的東西
04/06 09:09, 15F

04/06 10:16, , 16F
字串比對口說無憑, 拿出測量數據就知道真假,
04/06 10:16, 16F

04/06 10:16, , 17F
有疑惑的話就去測量比對時間, 看看哪個快, 不要用猜的。
04/06 10:16, 17F

04/06 10:52, , 18F
主要是自己寫一個class把string Hash成一組數字
04/06 10:52, 18F

04/06 10:52, , 19F
後面自己在寫operator去比較每個實例的該值
04/06 10:52, 19F

04/06 11:02, , 20F
你寫的程式很注重效能, 幾乎要求到需對 cpu 硬體架構
04/06 11:02, 20F

04/06 11:02, , 21F
有所理解, 我猜 cache 的運用可能也要考慮進去。
04/06 11:02, 21F

04/06 11:03, , 22F
提高 cache hit rate 之類的, 這對非本科系真的太難了
04/06 11:03, 22F

04/06 11:04, , 23F
因為對本科系, 這也很難。
04/06 11:04, 23F

04/06 11:04, , 24F
你公司應該很常用平行運算的lib?
04/06 11:04, 24F

04/06 11:05, , 25F
https://goo.gl/DLgLpY 這本參考看看, 不知對你有沒有用?
04/06 11:05, 25F

04/06 22:05, , 26F
04/06 22:05, 26F

04/07 02:57, , 27F
計概其實都有~~可以去看看~~雖然以前看的時候沒感覺
04/07 02:57, 27F

04/07 06:29, , 28F
Computer architecture /organization 多看看吧 計概
04/07 06:29, 28F

04/07 06:29, , 29F
應該不太夠
04/07 06:29, 29F

04/07 08:57, , 30F
下班幫你回一篇好了,平板有一些相關筆記,雖然我覺得
04/07 08:57, 30F

04/07 08:57, , 31F
跟C沒有太直接的關係
04/07 08:57, 31F

04/07 18:30, , 32F
原來資工學的東西還是有用的,我要認真讀了
04/07 18:30, 32F

04/07 19:23, , 33F
本想回個一篇,不過跟C的關聯性實在太低,所以用推文
04/07 19:23, 33F

04/07 19:23, , 34F
04/07 19:23, 34F

04/07 19:24, , 35F
原PO可以研究一下SIMD跟prefetch的指令集
04/07 19:24, 35F

04/10 15:04, , 36F
當 然 馬 有 用 -_-
04/10 15:04, 36F

04/15 09:44, , 37F
你去考個四大資工所 在準備的過程中這些問題就可以自我回
04/15 09:44, 37F

04/15 09:44, , 38F
答了
04/15 09:44, 38F

04/16 13:40, , 39F
1 會對齊某個倍數 一般是4 。也可以用選項關掉
04/16 13:40, 39F

04/16 13:41, , 40F
哪個選項我忘了 用man gcc查
04/16 13:41, 40F

04/16 13:42, , 41F
1.2 如果是密碼 就會用hash 藏起來,如果key長度要
04/16 13:42, 41F

04/16 13:42, , 42F
固定 也會用hash 轉換再存到硬碟
04/16 13:42, 42F

04/16 13:44, , 43F
2 因為正數有沒有開根號 數值大小比較關係不會變
04/16 13:44, 43F

04/16 13:45, , 44F
遇過就會知道 除非你自己花時間去刷題庫自己學
04/16 13:45, 44F

04/16 13:45, , 45F
1 補充 動態配置有一些機制會多花時間 但是我覺得
04/16 13:45, 45F

04/16 13:45, , 46F
快取的影響比較大
04/16 13:45, 46F
文章代碼(AID): #1OvHRo3H (C_and_CPP)