临时文件与malloc(在C中)

临时文件与malloc(在C中),c,C,我有一个程序,它生成的数据量可变,它必须存储以供以后使用。 什么时候我应该选择使用mallod+realloc,什么时候我应该选择使用临时文件?mmap(2,3p)(或)意味着永远不必在两者之间进行选择。mmap(2,3p)(或)意味着永远不必在两者之间进行选择。在现代操作系统中,如果需要,所有内存都会被分页到磁盘上,在现代操作系统中,如果需要,所有内存都会被分页到磁盘上,所以可以随意使用malloc()任何高达几GB的文件。如果需要/希望其他进程可以看到临时文件,则首选malloc/reall

我有一个程序,它生成的数据量可变,它必须存储以供以后使用。
什么时候我应该选择使用mallod+realloc,什么时候我应该选择使用临时文件?

mmap(2,3p)
(或)意味着永远不必在两者之间进行选择。

mmap(2,3p)
(或)意味着永远不必在两者之间进行选择。

在现代操作系统中,如果需要,所有内存都会被分页到磁盘上,在现代操作系统中,如果需要,所有内存都会被分页到磁盘上,所以可以随意使用malloc()任何高达几GB的文件。

如果需要/希望其他进程可以看到临时文件,则首选malloc/realloc,如果不需要,则首选malloc()。还要考虑与你的地址空间和虚拟内存相比的数据量:如果数据留在内存中,数据会消耗太多的交换空间吗?还考虑如何适合你的应用程序:文件读/写等可能是一个痛苦相比,内存访问…内存映射文件使之更容易,但您可能需要自定义库支持在其中执行动态内存分配。

如果您需要/希望临时文件对其他进程可见,则首选它;如果不需要,则首选malloc/realloc。还要考虑与你的地址空间和虚拟内存相比的数据量:如果数据留在内存中,数据会消耗太多的交换空间吗?还考虑如何适合你的应用程序:文件读/写等可能是一个痛苦相比,内存访问…内存映射文件使之更容易,但您可能需要自定义库支持在其中执行动态内存分配。

如果您知道最大大小,它不会太大,并且您只需要一个副本,则应使用在程序加载时分配的静态缓冲区:

char buffer[1000];
int  buffSizeUsed;
如果这些先决条件中的任何一个为false,并且您只需要在程序运行时获得这些信息,请使用
malloc

char *buffer = malloc (actualSize);
只需确保您检查分配是否有效,以及您是否释放了您分配的任何资源

如果信息必须在您的程序终止后继续存在,或者同时可以从其他程序中使用,则需要将其放入一个文件中(或者如果您具有该功能,则需要长期共享内存)

而且,如果它太大,无法立即放入您的地址空间,您需要将其存储在一个文件中,然后一次读取一点

这基本上是从最容易/最不灵活的可能性到最难/最灵活的可能性


您的需求在哪一行是您需要做出的决定。

如果您知道最大大小,它不会太大,并且您只需要一个副本,您应该使用在程序加载时分配的静态缓冲区:

char buffer[1000];
int  buffSizeUsed;
如果这些先决条件中的任何一个为false,并且您只需要在程序运行时获得这些信息,请使用
malloc

char *buffer = malloc (actualSize);
只需确保您检查分配是否有效,以及您是否释放了您分配的任何资源

如果信息必须在您的程序终止后继续存在,或者同时可以从其他程序中使用,则需要将其放入一个文件中(或者如果您具有该功能,则需要长期共享内存)

而且,如果它太大,无法立即放入您的地址空间,您需要将其存储在一个文件中,然后一次读取一点

这基本上是从最容易/最不灵活的可能性到最难/最灵活的可能性


您需要做出决定。在32位系统上,malloc()的容量不能超过2GB或3GB左右。文件的最大优点是它们仅受磁盘大小的限制。即使在64位系统中,分配超过8GB或16GB的数据也是不常见的,因为交换文件的大小通常会受到限制。

在32位系统中,malloc()不能超过2GB或3GB左右。文件的最大优点是它们仅受磁盘大小的限制。即使在64位系统中,分配超过8GB或16GB的数据也是不常见的,因为交换文件的大小通常有限制。

如果数据的大小大于目标系统的虚拟地址空间大小(32位主机上为2-3 gb),则使用临时文件或者如果它至少足够大,会给系统带来严重的资源紧张

否则使用
malloc


如果使用临时文件,请使用
tmpfile
函数来创建它们,因为在好的系统上,它们在文件系统中永远不会有名称,并且如果程序异常终止,它们也不会被留下。大多数人都不喜欢临时文件,就像微软的Office产品一样,这些产品往往到处都是。;-)

如果数据的大小大于目标系统的虚拟地址空间大小(32位主机上为2-3 gb),或者数据的大小至少足以给系统带来严重的资源紧张,请使用临时文件

否则使用
malloc


如果使用临时文件,请使用
tmpfile
函数来创建它们,因为在好的系统上,它们在文件系统中永远不会有名称,并且如果程序异常终止,它们也不会被留下。大多数人都不喜欢临时文件,就像微软的Office产品一样,这些产品往往到处都是。;-)

对私有数据和单个进程的生命周期使用ram。如果数据需要在单个进程的生命周期之外保持,请使用临时文件。

对私有数据和单个进程的生命周期使用ram。如果数据需要在单个进程之外保持,请使用临时文件。

也许您可以给我们一个更真实的程序描述,例如是否需要非常快的速度,是否需要在内存或磁盘空间很大的系统上使用,等等。你知道一旦程序终止了所有创建的东西