在C / C ++程序中,如何为参数向量内存分配内存?

时间:2016-01-23 15:03:44

标签: c memory memory-management argv argc

在C / C ++程序中,找到编写为:

的主函数是很常见的
int main( int argc, char *argv[] )
{
    ...
}

我对argv使用的内存有疑问: 它保留在哪一刻?在编译或执行时? 怎么做的? 它保留了多少内存? 是否可以对程序中的其他变量使用相同的技术?

1 个答案:

答案 0 :(得分:0)

关于argv使用的内存的问题:

内存用于命令行参数,不使用操作系统命令行时则不需要它。下面的主要功能还有效,取决于编译器,有时" NULL"需要在main()中插入才能正确编译。如果您不需要命令行,这可能会节省微量内存。 ;)

INT main()
{
    ... Not using (int argc, char *argv[]) is not too common though, most people type the command line arguments even when they don't use them. Strange I know, they must not know why they do what they do. ...
}

保留哪一刻?在编译或执行时?

"参数argc和argv以及argv数组指向的字符串应该可由程序修改,并在程序启动和程序终止之间保留它们最后存储的值。" C-Documentation:http://port70.net/~nsz/c/" c89"

如何制作?

它由变量和数组组成。因此(int argc ==变量)(char * argv [] == *指针aray)

保留了多少内存?

我会说4个字节...(int argc - > int 16bit)+(char * argv [] - > * pointer = 16bit)= 32bits ... lol,idk。未定义此数组的大小,取决于数组是否真正"字节大小",对齐,填充等等。

是否可以对程序中的其他变量使用相同的技术?

如果您愿意,我确定您可以将变量添加到main(),但这可能是"实现定义的"。显然,您也可以使用* argv []来存储任何程序变量,因为这就是它所用的。

  

P.S。

     

这完全取决于操作系统,您需要深入研究正在使用的编译器的文档。许多广泛的问题,调整你的要求我可以根据需要更具体!希望我能覆盖你所询问的内容。