一些有趣的疑问
- 字符串栈数组调用字符串库
API
进行赋值么
char szStackStr[] = "Hello World!";
答案:使用机器指令进行硬编码
- 无限循环存在比较指令么
while(1)
{
printf("Hello World!\n");
}
答案:while开始处,即使是没有编译优化的程序,也不存在比较跳转指令
特别建议:在某些场合,可以使用无限循环来节约编译指令
灵感来源Linux SCTP内核模块TSN回环比较节省指令变更
!
操作并不带来多一步操作的指令
int flag = 0;
while(flag)
{
printf("Hello World!\n");
}
// Compare
while(!flag)
{
printf("Hello World!\n");
}
答案:比较语句flag
与!flag
在指令操作上并不会多一步
- 不要小看函数调用带来的性能损失
int foo(int t) { ... }
if(flag)
{
foo(1);
}
else
{
foo(2);
}
// Compare
int arg = 2;
if(flag)
{
arg = 1;
}
foo(arg)
答案:函数具有传参、压栈、出栈等额外操作,会带来比较多的指令步骤
特别建议:
- 尽量减少在分支语句中调用相同函数,用参数形成,甚至结构体指针参数进行替代
- 短小函数推荐用内联函数;并充分编译器优化能力,编译器会自主对某些函数进行内联和合并