释放静态内存?不,那不可能是对的

时间:2010-08-31 16:05:56

标签: c++ memory embedded-resource

我一直在把资源嵌入到我的c ++程序中。为了做到这一点,我将数据hexdump为一个简单的数组,即

unsigned char image_png[] ={
    0x0a, 0x0b, 0x0c, 0x0d, ...
};

加载后没有使用其中一些资源(即它们转换为其他资源,然后原始数据只是批量...虽然为了便于分发,一小部分批量可能是值得的)。

我很好奇是否有办法将资源嵌入到程序中,因此我不必担心二进制文件能够找到所有最重要的资源,但是在它完成之后将其释放使用,以便运行时内存占用更少。

这可能吗?如果有可能,尝试这样做是一件愚蠢的事吗?例如,os可能会将整个程序映像保留在内存中(我不确定它是如何工作的)。

编辑:    要回答评论,我正在研究Linux(Ubuntu 10.04),但如果有跨平台解决方案,我很乐意听到它们

2 个答案:

答案 0 :(得分:4)

正如Tomaka17所说,你真的不必担心它 - 如果你从来没有接触到那个资源,它就永远不会出现问题,并且它不会消耗物理内存。当您加载DLL / so / whatever时,它实际上只是文件映射到内存中;尝试访问该文件导致实际上一块一块地读取文件。

答案 1 :(得分:0)

我看到在多个应用程序中使用的一种方法是连接可执行文件末尾的数据,然后附加数据本身的大小。

然后,您可以打开可执行文件,转到流的末尾并读取数据的大小,然后返回该大小并读取资源。

请注意,资源将与您放置的完全相同,因此组织可能会面临风险。

我也不知道这是否是最佳做法,但似乎有效。