局部自动变量(一个函数内部定义的变量)如果有赋初值动作,那么每次调用该函数时,这个赋值动作都会发生。
int fun(int a)
{
int a = 100;
}
如果这个局部变量是数组类型,且也被用如下方式赋初值。那么编译器在此处插入memset函数来完成这个赋初值动作。所以,我们会发现如下代码经过反汇编后,里面会有一个memset函数的调用。
int fun(int a)
{
int a[5] = {1,2,3,4,5};
}
如下没有赋初值动作的定义,则不会有memset。int fun(int a)
{
int a[5] ;
}
本文深入探讨了局部自动变量在函数内的初始化过程,解释了数组类型变量初始化时编译器如何使用memset函数,以及未初始化定义的区别。通过代码示例展示了编译后的反汇编结果中对memset的调用。
1887

被折叠的 条评论
为什么被折叠?



