如何在共享库中存储大量数据而不加载它 我想用C++在共享库(X平台)中存储一个二进制的数据块。目前,我的二进制数据存储为一个包含十六进制值的无符号字符数组,以及一个给出数据大小的助手 unsigned char large_data[] = {0x24, 0x23...}; int sizeofLargeData = sizeof(large_data);

如何在共享库中存储大量数据而不加载它 我想用C++在共享库(X平台)中存储一个二进制的数据块。目前,我的二进制数据存储为一个包含十六进制值的无符号字符数组,以及一个给出数据大小的助手 unsigned char large_data[] = {0x24, 0x23...}; int sizeofLargeData = sizeof(large_data);,c++,shared-libraries,C++,Shared Libraries,相应的头文件如下所示: RR_PLUGIN_DECLSPEC extern unsigned char pdf_docs[]; RR_PLUGIN_DECLSPEC extern size_t sizeofpfdf 现在,与其让大型_数据成为一个全局对象,在加载共享库时有可能被加载到内存中,我如何设置它,以便只在需要时分配内存,也可以处理内存 一篇相关的帖子,有一条建议创建本地数据的评论,听起来像是要走的路,但由于某种原因,该评论被删除。您希望如何准确地填充新分配的数组?如果要从大数据进行复制,

相应的头文件如下所示: RR_PLUGIN_DECLSPEC extern unsigned char pdf_docs[]; RR_PLUGIN_DECLSPEC extern size_t sizeofpfdf

现在,与其让大型_数据成为一个全局对象,在加载共享库时有可能被加载到内存中,我如何设置它,以便只在需要时分配内存,也可以处理内存


一篇相关的帖子,有一条建议创建本地数据的评论,听起来像是要走的路,但由于某种原因,该评论被删除。

您希望如何准确地填充新分配的数组?如果要从
大数据
进行复制,则会占用两倍的内存(一个用于加载
大数据
,另一个用于临时数组)。如果您知道如何动态填充数组(即从文件读取),那么问题出在哪里?只要有一些全局可访问的变量,您可以检查
大数据
是否已初始化,如果未初始化,则从其他地方加载数据。数据不是从文件读取的。数据嵌入到共享库中。问题是如何能够动态地创建和处理它,仅此而已。目前,数据是全局的,可能会在加载共享库时加载,并且在访问数据时肯定会加载。在那之后,我没有办法处理(删除)它。首先,您将如何动态地创建它?这些预先计算的值对您很重要。。。不用的时候,你打算把它们存放在哪里?链接的答案说,在你访问它们之前,它们甚至不会被加载到内存中。存储在磁盘上的数据有问题吗?2.如果您想释放空间,我不知道是否有一种方法可以在不卸载整个DLL的情况下从DLL卸载单个变量。如果操作系统需要内存,它会将您的数据分页到磁盘。您问的问题与我问的问题相同。至于它们的存储,它们将嵌入到共享库中,可能具有本地范围。正如你所建议的,全球范围的问题是如何释放?是的,我从磁盘读取它们时遇到问题。我可以看到有一个函数在本地创建数据并返回指向它的指针。客户端可以在使用数据后调用dispose函数,并将指针作为参数。但是现在,我不知道该怎么做。。这就是我的问题。我没有试过,但一种可能的方法是创建两个DLL——一个只有数据,可能还有一个假函数;另一个是你真正的功能。数据DLL将在需要时加载。完成后,您可以手动卸载数据DLL。