我了解xargs --limits
和getconf ARG_MAX
。是否值得考虑有人达到这个限制的想法,如果是这样,会对程序产生任何负面影响吗?例如,假设你这样做:
std::vector<std::string> v(argv, argv + argc);
可能发生的最糟糕的事情是std::bad_alloc
被抛出了吗?
答案 0 :(得分:1)
对我而言,由于内存不足,这与任何其他分配错误没有什么不同。我会保持原样 - 毕竟,如果遇到这个问题,除了让程序终止(这是默认行为)之外,你可以做的事情很少。
通常,在使用较旧的shell时,您会在命令行中达到“限制” - 在这种情况下,它是对shell进程中保存命令行参数的缓冲区的限制(即,您尝试使用太长的命令行启动程序,因此shell会截断它或报告错误)
答案 1 :(得分:1)
如果有人尝试使用过多参数调用程序,exec*()
操作将失败,并且您的程序未运行。因此,只能使用适合参数和环境变量的空间的参数列表来调用您的程序。
如果你的程序试图调用另一个程序并且你的程序创建了一个太大的参数列表,那么你的程序将无法exec*()
另一个,因为参数加上环境太大,得到错误E2BIG。
理论上,您可能会遇到将参数列表复制到字符串向量中的内存分配问题,但这种可能性相对较小。 Linux上的实际限制大约为128 KiB,Mac OS X上大约为256 KiB。