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

che*_*kow 7 c++ memory embedded-resource

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

unsigned char image_png[] ={
    0x0a, 0x0b, 0x0c, 0x0d, ...
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ana*_*tts 4

正如 Tomaka17 所说,您实际上不必担心它 - 如果您从不接触该资源,它就永远不会出现故障,并且不会消耗物理内存。当您加载 DLL/so/无论什么时,它实际上只是将文件映射到内存;尝试访问该文件会导致实际逐段读取该文件。

  • @cheshirekow 如果您的代码从未接触过 PNG 数据,那么它最终将被操作系统回收。只读页可以被丢弃,因为它们永远不会被写入,并且如果需要的话将再次按需调入。程序的唯一成本是一些虚拟地址空间。 (2认同)