记录c语言一些有趣的疑问

一些有趣的疑问

  • 字符串栈数组调用字符串库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)



答案:函数具有传参、压栈、出栈等额外操作,会带来比较多的指令步骤

特别建议:

  • 尽量减少在分支语句中调用相同函数,用参数形成,甚至结构体指针参数进行替代
  • 短小函数推荐用内联函数;并充分编译器优化能力,编译器会自主对某些函数进行内联和合并

未完待续 …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值