gpt4 book ai didi

c++ - 在 C++ 编译时从 CSV 创建 vector

转载 作者:行者123 更新时间:2023-11-27 22:50:23 25 4
gpt4 key购买 nike

我正在尝试为我的 Xilinx Zynq SoC(ARM Cortex)创建一个查找表。

我有一个包含 1330 个条目的 CSV 文件,我无法在运行时读取或解析这些条目。我最近能做的是在编译时。我读过可以将文件嵌入到可执行文件中,以便在运行时使用它。

换句话说,我想在运行时读取和解析 CSV 文件,而原始文件实际上不在任何文件系统上,因为它是嵌入式设备。所以我需要以某种方式将 CSV 文件嵌入到可执行文件中。我将如何实现这样的目标?

CSV 文件如下所示(完整文件为 here );

0,0,48,112,160,208,272,320,368,....,65440,65488

最佳答案

您要求使用 vector,但我不确定您为什么一定要它。数据将不可避免地占用应用程序的只读(“.text”或“.rodata”或类似的东西)部分的空间,虽然您可以在必要时将其转换为 vector(这将消耗堆空间并需要从只读 .text/.rodata 部分中的数据进行运行时构造和初始化),您不妨将其用作 POD array因为我怀疑您会在运行时更改数据。因此,要创建数据的 const POD 数组,您只需执行以下操作....

const int myArray[] =
{
#include "myCsvFile.csv"
};

如果元素的数量不固定,您的程序可以使用 sizeof(myArray)/sizeof(myArray[0]) 确定数量。即使它是固定大小,这种技术也可能是最好的。当然,如果您的所有条目都是无符号的并且可以容纳在 16 位以内(建议粗略检查),而不是将其定义为 int 数组,您可以将其定义为 unsigned shortuint16_t 以节省空间。

我还应该提到 const 关键字在这里很重要:没有它,您的数组将占用两倍的内存:首先,它将占用只读部分的空间(.text 或.rodata 或其他),并且在应用程序初始化期间,运行时将在读/写数据部分(可能是 .data)中制作只读数据的可读/可写拷贝,其中分配了 myArray .为避免这种情况,将其定义为const,然后myArray的地址将位于只读部分,并且不会被复制到读写数据中部分。

关于c++ - 在 C++ 编译时从 CSV 创建 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37733025/

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