作者archon (三脚猫的把戏)
看板C_and_CPP
标题[问题] 一行程式码中多次 assign...
时间Wed Dec 9 15:40:59 2009
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
1F:→ ilway25:我的想法是.. 不一定 12/09 15:52
※ 编辑: archon 来自: 122.116.90.104 (12/09 16:12)
2F:→ Yshuan:大一上课隐约听说c这样写有比较快 12/09 16:09
3F:推 ledia:应该是一样的吧 12/09 16:09
4F:→ twotwoone:差不多 12/09 16:15
5F:→ archon:差不多,到底是有差还是没差... ( ̄▽ ̄#)﹏﹏ 12/09 16:16
6F:推 VictorTom:Disasm来看XD 12/09 16:16
7F:→ VictorTom:说真的, 你的memset的effort应该都比那几个assign大得多 12/09 16:17
8F:→ VictorTom:除非你分析过hot spot在这, 不然老实说效能影响有限@_@" 12/09 16:18
9F:→ VictorTom:对了, 是 = 1 不是 = 0 唷....XD 12/09 16:18
10F:推 joefaq:VC的ASM两种写法看起来没有差 12/09 16:21
11F:推 twotwoone:差不多到不值得花时间多说 12/09 16:35
12F:→ archon:那...用16个 assign 跟 1 个 memset + 4个 assign 比起来? 12/09 20:23
13F:推 ledia:没差别, 我想你应该探讨的是一千六百万次, 而不是 16 次 12/09 23:13
14F:→ ledia:不然都是没差别 12/09 23:14
15F:→ VictorTom:我记得memset/memcpy这类的lib实作上, 遇到数量少的范围 12/09 23:17
16F:→ VictorTom:也是直接回圈拆解或直接assign(但是会多function call 12/09 23:17
17F:→ VictorTom:时操作stack的effort), 资料量大就可以利用mem对齐的状 12/09 23:18
18F:→ VictorTom:况, 使用指令集来做整批的....@_@" 12/09 23:18
19F:→ ledia:一般 memcpy/memset 会先把非 align 的部份用 assign 做完 12/09 23:25
20F:→ ledia:之後整批用 word copy, 会比一般直接一个 byte 一个 byte 设 12/09 23:26
21F:→ ledia:快不少 12/09 23:26