gpt4 book ai didi

c - 在C/C++程序中,如何为参数 vector 内存分配内存?

转载 作者:行者123 更新时间:2023-11-30 17:06:01 25 4
gpt4 key购买 nike

在 C/C++ 程序中,很常见的情况是 main 函数写成:

int main( int argc, char *argv[] )
{
...
}

我关于argv使用的内存的问题:在哪一刻被保留?在编译时或执行时?它是如何制作的?预留了多少内存?是否可以对程序中的其他变量使用相同的技术?

最佳答案

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

内存用于命令行参数,不使用操作系统命令行时则不需要它。下面的 main 函数也可以工作,但取决于编译器,有时需要在 main() 中插入“NULL”才能正确编译。如果您不需要命令行,这可能会节省少量的内存。 ;)

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-文档:http://port70.net/~nsz/c/ “c89”

它是如何制作的?

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

预留了多少内存?

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

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

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

P.S.

This depends entirely on the operating system, you would need to dig into documentation of the compiler being used. Many broad questions, tune what you are asking I can get more specific if needed!! Hope I covered what you are asking about.

关于c - 在C/C++程序中,如何为参数 vector 内存分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com