摘要:
void set(int* a, int* b);void setA(int a){ set(&a, 0);}void setB(int b){ set(0, &b);}int g_a = 0, g_b = 0;void set(int* a, int* b){ if (a) g_a = *a; if (b) g_b = *b;}看看这段代码,乍一看没什么问题仔细琢磨,能发现这个setA和setB函数有个问题:如果编译器默认调用约定是fastcall类型的寄存器调用(如现在的ARM、PPC),那么可能会将入参存放在寄存器中,而对入参取地址... 阅读全文