1.避免变量冗余初始化
- 结构体初始化为0,等价于对该内存进行一次memset,对于较大的结构体或者热点函数,重复的赋值带来冗余的性能开销。
- 现代编译器对此类冗余初始化代码具有一定的优化能力,因此,打开相关的编译选项的优化后,此类问题可能被优化掉。
#include <stdio.h>
typedef struct {
unsigned int year;
unsigned int month;
unsigned int day;
} TimeInfo;
void TimeInit (TimeInfo *data) {
data->year = 2022;
data->month = 9;
data->day = 22;
}
int main(void) {
TimeInfo data;//TimeInfo data = {0};
TimeInit(&data);
return 0;
}
使用gcc -S编译出来为汇编语言
movq $0, -20(%rbp)
movl $0, -12(%rbp)
movq $0, -20(%rbp):将64位的0存储到栈上,偏移-20(%rbp)。
movl $0, -12(%rbp):将32位的0存储到栈上,偏移-12(%rbp)。
这两行代码通常用于初始化局部变量为0。