命令行参数驻留在哪里?

Sea*_*ean 5 c linux memory

已知C语言中main函数的原型为int main(int argc, char **argv)。argv 数组指向的那些字符串驻留在哪里?它们位于哪个内存段?数据、栈还是堆?

谢谢。

Nat*_*dge 6

在 Linux 下,当程序启动时,指针本身和它们指向的字符串都位于堆栈上。这将位于main()堆栈框架上方的某个位置。C 库启动代码负责将适当的指针传递给main().

fs/binfmt_elf.c您可以在 、 函数中找到设置新程序堆栈的内核代码,包括参数和其他所有内容create_elf_tables()

(我刚刚了解到的有趣事实:在堆栈的更上方,您可以找到 16 个随机字节,它们有时exec由内核放置在那里,以方便您的 RNG 播种。以防万一您不想麻烦地打开/dev/urandom. )