linux下main函数的参数是在栈里还是在堆里

时间:2021-09-17 21:21:57
linux 下 main(int argc,char **argv) 的 main函数的参数是分配到栈里还是分配到堆里?
大家有没有这方面更加详尽的说明

程序及测试结果

#include <stdio.h>

int num = 0;

int main(int argc,char **argv,char **env)
{
    int ch = 0;

    printf("&ch   : %p\n",&ch);
    printf("&num  : %p\n",&num);

    printf("&argc  : %p\n",&argc);
    printf("&argv  : %p\n",&argv);
    printf("&env   : %p\n",&env);
    printf("argv[0] : %p\n",argv[0]); // main函数名
    printf("argv[1] : %p\n",argv[1]); // ?不知这个空间合不合法

    return 0;
}



linux下main函数的参数是在栈里还是在堆里

9 个解决方案

#1


main的形参肯定是栈上呀,要不退出main之后岂不是内存泄露了

#2


ls的解释似乎合理

#3


LZ的截图已经能够说明问题了。
ch是在栈上的,argc/argv/env三个参数的地址离它不远。

#4


在环境中。

#5


栈里,地址就很说明问题

#6


当然是在栈里

#7


堆是由你手动分配释放的

#8


int argc,
char **argv,
char **env
这三个是在栈中
*argv 也许在栈中,毕竟程序员自己也可用用 alloca 分配栈上内存
**argv 在命令行参数 或者命令行参数某个copy的存储位置
  env 与此雷同

#9


请参考《CSAPP》中第8章 异常控制流,有图片显示告诉你,char ** agrv和char ** env保存在栈上,且在main函数栈之前,agrv和env指向一个以NULL为结尾的char*数组,数组中每一个值都指向一个字符串。
以上char*数组和字符串都是在栈中,且在mian函数栈前。

#1


main的形参肯定是栈上呀,要不退出main之后岂不是内存泄露了

#2


ls的解释似乎合理

#3


LZ的截图已经能够说明问题了。
ch是在栈上的,argc/argv/env三个参数的地址离它不远。

#4


在环境中。

#5


栈里,地址就很说明问题

#6


当然是在栈里

#7


堆是由你手动分配释放的

#8


int argc,
char **argv,
char **env
这三个是在栈中
*argv 也许在栈中,毕竟程序员自己也可用用 alloca 分配栈上内存
**argv 在命令行参数 或者命令行参数某个copy的存储位置
  env 与此雷同

#9


请参考《CSAPP》中第8章 异常控制流,有图片显示告诉你,char ** agrv和char ** env保存在栈上,且在main函数栈之前,agrv和env指向一个以NULL为结尾的char*数组,数组中每一个值都指向一个字符串。
以上char*数组和字符串都是在栈中,且在mian函数栈前。