gpt4 book ai didi

c - 我应该在分配之前计算所需的内存量吗?

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:41 25 4
gpt4 key购买 nike

考虑以下代码以过滤掉破折号前缀的参数:

int main(int argc, char* argv[]) {
int i;
int j;
size_t flags_len;
char* flags;

flags_len = 0;
for (i=1; i < argc; i++) {
if (argv[i][0] == '-') {
flags_len++;
}
}

flags = malloc(flags_len);

j = 0;
for (i=1; i < argc; i++) {
if (argv[i][0] == '-') {
flags[j++] = argv[i][1];
}
}

return 0;
}

是否值得为了计算标志的数量而遍历所有参数两次?
这样做时保存过滤后元素的位置是否可行?
如果我们期望分配大量内存,是否值得?
一般而言,哪种选择是最佳的? (什么是“最佳实践”)?

  • 分配前计数(1 调用 malloc,大速度损失)
  • 分配缓冲区(floor(n/buffersize) + 1 调用 malloc(或 realloc),速度损失小)
  • 在需要时分配(n 调用 malloc(或 realloc),没有额外的速度损失)

最佳答案

恕我直言,您没有指定您期望的参数数量。如果您期待成千上万的争论,那肯定不会成为瓶颈。请记住,机器正在做这项工作,而不是你。

在这种情况下,分配和重新分配的效率低于两个循环。此外,如果您害怕双重循环,您始终可以分配 flags=malloc(argc)

炭很便宜。我会做这样的事情,

flag = malloc(argc);
//your code
if(argv[i][0]=='-')
flags[j++] = argv[i][1];

为什么?为我节省了两个循环,并将比较减半。 :)

关于c - 我应该在分配之前计算所需的内存量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34947551/

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