gpt4 book ai didi

c - 如何在最小化时间的同时最小化指针

转载 作者:行者123 更新时间:2023-11-30 17:31:20 24 4
gpt4 key购买 nike

在嵌入式应用程序中,我需要将二进制文件读入有限的内存中,然后在最短的时间内解析它。

可以读取整个文件并分配内存:

char **array = malloc(sizeof(char *) * row);
for(char c = 0; c < 240; c++){ /*320 x 240 file*/
array[c] = malloc(320);
}

这将导致至少 240 个指针,每个指针 4 字节

或者:

array = malloc(320*240);

这最小化了指针,但会导致每次访问时发生乘法解析。如果没有硬件倍增,时间成本将会非常昂贵。

为了进行解析,内存中一次至少需要三行。

从SD卡读取速度很慢,我不确定是否一次读取一行解析会比一次读取整个文件然后解析慢。

这个问题的答案将决定内存大小的要求处理器。当然,较小的处理器会更便宜,这是一个巨大的因素,但解析时间可能是一个更大的因素。

最佳答案

在不知道可用的文件访问器方法是什么的情况下,很难给出完整的建议,但您可能需要考虑使用 fread 之类的方法一次读取指定大小的 block ,然后使用它来不断填充(正如已经说过的)一个 3 缓冲区集。所以类似:

FILE *fileStream = fopen ("file.bin", "rb");
char **array = malloc(sizeof(char *) * 3);
int i = 0;
size_t bytesRead = 0;

while (!feof(fileStream))
{
for (i = 0; i < 3; i++)
{
/* If read has returned some bytes - i.e. not at EOF */
if (fread (&array[i], 1, 320, fileStream))
{
/* Assuming target knows size of array. Pass in number in iteration
* so target function knows where the read ends */
doProcessing (array, i);
}
}
}

这将允许文件流在其自己的内部缓冲区中处理您关心的 IO 缓冲等,然后您可以使用 fread 来读取点菜。

但是在这么说时,我做了几个假设:

  1. 可以使用 fread 函数来访问此 SD 卡
  2. 基于“行”的结构实际上对于您正在解析的二进制文件来说是合理的,并且您不必存储为每行或换行符分隔集填充的字节数数据。

关于c - 如何在最小化时间的同时最小化指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24670062/

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