[問題] 一行程式碼中多次 assign...

看板C_and_CPP (C/C++)作者 (三腳貓的把戲)時間16年前 (2009/12/09 15:41), 編輯推噓5(5016)
留言21則, 7人參與, 最新討論串1/1
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

12/09 15:52, , 1F
我的想法是.. 不一定
12/09 15:52, 1F
※ 編輯: archon 來自: 122.116.90.104 (12/09 16:12)

12/09 16:09, , 2F
大一上課隱約聽說c這樣寫有比較快
12/09 16:09, 2F

12/09 16:09, , 3F
應該是一樣的吧
12/09 16:09, 3F

12/09 16:15, , 4F
差不多
12/09 16:15, 4F

12/09 16:16, , 5F
差不多,到底是有差還是沒差... ( ̄▽ ̄#)﹏﹏
12/09 16:16, 5F

12/09 16:16, , 6F
Disasm來看XD
12/09 16:16, 6F

12/09 16:17, , 7F
說真的, 你的memset的effort應該都比那幾個assign大得多
12/09 16:17, 7F

12/09 16:18, , 8F
除非你分析過hot spot在這, 不然老實說效能影響有限@_@"
12/09 16:18, 8F

12/09 16:18, , 9F
對了, 是 = 1 不是 = 0 唷....XD
12/09 16:18, 9F

12/09 16:21, , 10F
VC的ASM兩種寫法看起來沒有差
12/09 16:21, 10F

12/09 16:35, , 11F
差不多到不值得花時間多說
12/09 16:35, 11F

12/09 20:23, , 12F
那...用16個 assign 跟 1 個 memset + 4個 assign 比起來?
12/09 20:23, 12F

12/09 23:13, , 13F
沒差別, 我想你應該探討的是一千六百萬次, 而不是 16 次
12/09 23:13, 13F

12/09 23:14, , 14F
不然都是沒差別
12/09 23:14, 14F

12/09 23:17, , 15F
我記得memset/memcpy這類的lib實作上, 遇到數量少的範圍
12/09 23:17, 15F

12/09 23:17, , 16F
也是直接迴圈拆解或直接assign(但是會多function call
12/09 23:17, 16F

12/09 23:18, , 17F
時操作stack的effort), 資料量大就可以利用mem對齊的狀
12/09 23:18, 17F

12/09 23:18, , 18F
況, 使用指令集來做整批的....@_@"
12/09 23:18, 18F

12/09 23:25, , 19F
一般 memcpy/memset 會先把非 align 的部份用 assign 做完
12/09 23:25, 19F

12/09 23:26, , 20F
之後整批用 word copy, 會比一般直接一個 byte 一個 byte 設
12/09 23:26, 20F

12/09 23:26, , 21F
快不少
12/09 23:26, 21F
文章代碼(AID): #1B7rIEN- (C_and_CPP)
文章代碼(AID): #1B7rIEN- (C_and_CPP)