在C/C++中,main函数接收类型为char*
的参数.
int main(int argc, char* argv[]){
return 0;
}
argv
是char*
的数组,指向字符串.这些绳子在哪里?它们是在堆上、堆栈上还是其他地方?
在C/C++中,main函数接收类型为char*
的参数.
int main(int argc, char* argv[]){
return 0;
}
argv
是char*
的数组,指向字符串.这些绳子在哪里?它们是在堆上、堆栈上还是其他地方?
它实际上是编译器依赖性和操作系统依赖性的结合.main()
是一个函数,与任何其他C函数一样,因此两个参数argc
和argv
的位置将遵循平台上编译器的标准.e、 g.对于大多数以x86为目标的C编译器,它们将位于返回地址和保存的基指针上方的堆栈上(记住,堆栈向下增长).在x86_上,64个参数在寄存器中传递,因此argc
将在%edi
中,argv
将在%rsi
中.编译器生成的主函数中的代码然后将它们复制到堆栈中,这就是后面引用的地方.这样寄存器就可以用于main
的函数调用.
argv所指的char*
位挡路和实际的字符序列可能在任何地方.它们将在某个操作系统定义的位置开始,并可能被链接器生成的前导代码复制到堆栈或其他地方.您必须查看exec()
的代码和链接器生成的汇编器前导才能找到答案.