最大命令行参数

3

我知道关于 xargs --limitsgetconf ARG_MAX 的内容。是否值得考虑有人达到这个限制的想法,如果是这样的话,程序会有什么负面影响吗?例如,假设你执行以下操作:

std::vector<std::string> v(argv, argv + argc);

最糟糕的情况是会抛出 std::bad_alloc 异常吗?


通常我会用try/catch包装主函数,这样你可以打印一个错误信息,告诉用户提供了太多的参数导致内存不足。 - 111111
2个回答

2
如果有人尝试使用太多的参数来调用程序,则exec*()操作会失败,您的程序将无法运行。因此,您的程序只能被调用带有适合可用空间的参数和环境变量列表。
如果您的程序试图调用另一个程序并且您的程序创建了太大的参数列表,则您的程序将无法exec*()其他程序,因为参数加上环境变量太大,会出现错误E2BIG。
在将参数列表复制到字符串向量中时,您可能理论上会遇到内存分配问题,但这种情况相对不太可能发生。实际限制是Linux上约为128 KiB,Mac OS X上约为256 KiB。

1
对我而言,这与由于内存不足而导致的任何其他分配错误没有区别。我会保持它原样 - 毕竟,如果您遇到此问题,除了让程序终止(这本来就是默认行为)外,几乎没有什么可做的。
通常,在使用旧的shell时,当涉及到命令行时,您会达到一个“限制”,在这种情况下,是shell进程中保存命令行参数的缓冲区的限制(也就是说,您尝试使用过长的命令行启动程序,因此shell会截断它或报告错误)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接