gpt4 book ai didi

gnu-sort - gnu sort - 默认缓冲区大小

转载 作者:行者123 更新时间:2023-12-04 16:42:41 25 4
gpt4 key购买 nike

我已阅读全文 documentation对于 gnu 排序和在线搜索,但我找不到 --buffer-size 选项的默认值是什么(它决定了程序在运行时使用多少系统内存)。我猜它是根据系统总内存以某种方式确定的? (或者可能在程序开始执行时可用的内存上?)。我如何确定这一点?

更新:我进行了一些实验,似乎当我没有指定特定的 --buffer-size 值时,它最终使用的内存非常少,因此运行速度非常慢。不过,最好能更好地了解究竟是什么决定了这种行为。

最佳答案

我深入研究了 coreutils 排序源代码,发现了这些函数: default_sort_size sort_buffer_size .

原来--buffer-size (源代码中的 sort_size)不是目标缓冲区大小,而是最大缓冲区大小。如果没有 --buffer-size值被指定,default_sort_size函数用于确定安全的最大缓冲区大小。它根据资源限制、可用内存和总内存执行此操作。功能总结如下:

size = MIN(SIZE_MAX, resource_limit) / 2;
mem = MAX(available_memory, total_memory / 8);

if ( size > total_memory * 0.75 )
size = total * 0.75;

buffer_max = MIN(mem, size);
buffer_max = MAX(buffer, MIN_SORT_SIZE);

另一个函数, sort_buffer_size , 用于确定为给定的输入文件分配多少内存。功能总结如下:
if (sort_size is set)
size_bound = sort_size;
else
size_bound = default_sort_size();

buffer_size = line_bytes + 2;

for each input_file
if (input_file is regular)
file_size = input_file_size;
else
if (sort_size is set)
return sort_size;
else
file_size = guess;

worst_case = file_size * worst_case_per_input_byte + 1;

if (worst_case overflows || size + worst_case >= size_bound)
return size_bound;
else
size += worst_case;

return size;

可能是 sort_buffer_size最重要的一点功能是,如果你从 STDIN 或管道中排序数据,它会自动默认为 sort_size (即 --buffer-size )如果提供。否则,对于普通文件,它会根据文件大小做一些粗略的计算,只使用 sort_size作为上限。

关于gnu-sort - gnu sort - 默认缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37514283/

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