Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于预分配C阵列来说,过度配置是一种糟糕的做法吗?_C_Arrays - Fatal编程技术网

对于预分配C阵列来说,过度配置是一种糟糕的做法吗?

对于预分配C阵列来说,过度配置是一种糟糕的做法吗?,c,arrays,C,Arrays,我正在编写一个从Python到C的接口,C中的数据结构是一些变量大小的数组。因为在初始化数组之前,大小不是一个常数,所以我不知道数组的长度 将数组大小设置为1000,而数组大小可能介于1和1000之间-这是一种不好的做法吗? 有什么更好的方法可以做到这一点?马洛克 上下文:此数组指针将用于通过网络作为应用层协议发送数据,因此我需要将数据作为数组。如果分配1000个元素会增加平台上可用的内存,这只是一种不好的做法。只有1000个元素,在服务器或台式机上很少会出现问题;这可能是嵌入式系统中的一个问题

我正在编写一个从Python到C的接口,C中的数据结构是一些变量大小的数组。因为在初始化数组之前,大小不是一个常数,所以我不知道数组的长度

将数组大小设置为1000,而数组大小可能介于1和1000之间-这是一种不好的做法吗? 有什么更好的方法可以做到这一点?马洛克


上下文:此数组指针将用于通过网络作为应用层协议发送数据,因此我需要将数据作为数组。

如果分配1000个元素会增加平台上可用的内存,这只是一种不好的做法。只有1000个元素,在服务器或台式机上很少会出现问题;这可能是嵌入式系统中的一个问题。如果您正在考虑预分配1M或更多的元素,特别是如果正常情况下是1k元素,那么即使在大型机器上,这也可能是一种过度消耗,尽管这并不完全明确。堆栈大小是有限的,但全局变量通常是巨大的


如果有1001个项目需要处理,那么后备计划是什么?当有更多行时,您的测试是否将验证行为?忽略此问题是不可接受的-它可能导致缓冲区或数组溢出。如果您恢复到动态分配,可能您应该一直在动态分配(至少这样您知道动态内存分配代码是经过测试的)。如果您只是想拒绝额外的元素,而这对用户来说是可以的,那么您可以简单地使用固定大小并检查它是否溢出。

如果分配1000个元素会增加平台上可用的内存,这只是一种不好的做法。只有1000个元素,在服务器或台式机上很少会出现问题;这可能是嵌入式系统中的一个问题。如果您正在考虑预分配1M或更多的元素,特别是如果正常情况下是1k元素,那么即使在大型机器上,这也可能是一种过度消耗,尽管这并不完全明确。堆栈大小是有限的,但全局变量通常是巨大的


如果有1001个项目需要处理,那么后备计划是什么?当有更多行时,您的测试是否将验证行为?忽略此问题是不可接受的-它可能导致缓冲区或数组溢出。如果您恢复到动态分配,可能您应该一直在动态分配(至少这样您知道动态内存分配代码是经过测试的)。如果您只是想拒绝额外的元素,而这对用户来说是可以的,那么您可以简单地使用固定大小,并检查它是否溢出。

否。这是一种正常的做法。静态分配和动态分配各有利弊。你应该对他们进行评估。不,这不是一个基于意见的问题,如果给出完整的信息,答案是相当客观的。听起来你想要一个可变长度数组(C从C99开始就有了)。我建议
alloca
这取决于你没有告诉我们的一些事情。例如:内存使用重要吗?性能重要吗?您知道元素数量的上限吗?等等。否。这是一个不错的做法。静态分配和动态分配各有利弊。你应该对他们进行评估。不,这不是一个基于意见的问题,如果给出完整的信息,答案是相当客观的。听起来你想要一个可变长度数组(C从C99开始就有了)。我建议
alloca
这取决于你没有告诉我们的一些事情。例如:内存使用重要吗?性能重要吗?您知道元素数量的上限吗?等等。我会说,如果进程必须处理1000字节数组,并且使用1000字节数组确实会增加系统上可用的内存,该系统符合规范。@andrew Henle:如果你是针对平均需求和峰值需求设计的,并且大多数时候只需要处理100个元素,那么你就可以了。尽管malloc也会产生相当大的开销,这取决于您的环境,我们讨论的是平均与峰值情况下的10阶(这并不多)…我会说,如果进程必须处理1000字节数组,并且使用1000字节数组确实会增加系统上可用的内存,该系统符合规范。@andrew Henle:如果你是针对平均需求和峰值需求设计的,并且大多数时候只需要处理100个元素,那么你就可以了。尽管malloc也会产生相当大的开销,这取决于您的环境,我们讨论的是平均与峰值情况下的10个订单(这并不多)。。。