看板 C_and_CPP 關於我們 聯絡資訊
a = ++a + a++; // 十誡之九,這跟佛跳牆做到會爆炸是一樣不被允許的!!! 不過,我想要問的是底下這個... a = b = c = d = 1; 這樣寫,執行上有比較快嗎?  還是說跟 a = 1; b = 1; c = 1; d = 1; 沒差?  更深一層說,我其實想做的是類似設 identity 矩陣這種動作  目的:1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 code: typedef struct _SM3dMatrixf { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; }; float m[4][4]; }; } SM3dMatrixf;  怎麼設比較妥當? void M3DMatrixIdentity(SM3dMatrixf* pOut) { if( pOut ) { memset( pOut, 0, sizeof( SM3dMatrixf ) ); pOut->_11 = pOut->_22 = pOut->_33 = pOut->_44 = 0; } else { assert( 0 ); } }  這樣好嗎? --  追根究底所得到的東西,是失望的觀眾,以及狼狽的魔術師... De'Ring Practice http://www.wretch.cc/blog/miauwally/21246514 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.90.104
ilway25:我的想法是.. 不一定 12/09 15:52
※ 編輯: archon 來自: 122.116.90.104 (12/09 16:12)
Yshuan:大一上課隱約聽說c這樣寫有比較快 12/09 16:09
ledia:應該是一樣的吧 12/09 16:09
twotwoone:差不多 12/09 16:15
archon:差不多,到底是有差還是沒差... ( ̄▽ ̄#)﹏﹏ 12/09 16:16
VictorTom:Disasm來看XD 12/09 16:16
VictorTom:說真的, 你的memset的effort應該都比那幾個assign大得多 12/09 16:17
VictorTom:除非你分析過hot spot在這, 不然老實說效能影響有限@_@" 12/09 16:18
VictorTom:對了, 是 = 1 不是 = 0 唷....XD 12/09 16:18
joefaq:VC的ASM兩種寫法看起來沒有差 12/09 16:21
twotwoone:差不多到不值得花時間多說 12/09 16:35
archon:那...用16個 assign 跟 1 個 memset + 4個 assign 比起來? 12/09 20:23
ledia:沒差別, 我想你應該探討的是一千六百萬次, 而不是 16 次 12/09 23:13
ledia:不然都是沒差別 12/09 23:14
VictorTom:我記得memset/memcpy這類的lib實作上, 遇到數量少的範圍 12/09 23:17
VictorTom:也是直接迴圈拆解或直接assign(但是會多function call 12/09 23:17
VictorTom:時操作stack的effort), 資料量大就可以利用mem對齊的狀 12/09 23:18
VictorTom:況, 使用指令集來做整批的....@_@" 12/09 23:18
ledia:一般 memcpy/memset 會先把非 align 的部份用 assign 做完 12/09 23:25
ledia:之後整批用 word copy, 會比一般直接一個 byte 一個 byte 設 12/09 23:26
ledia:快不少 12/09 23:26