一旦创建链表的程序在不删除动态内存的情况下关闭,并且我知道需要删除动态内存,那么在重新打开程序后如何让它恢复工作,如果我无法取回链表然后链表有什么用
3 回答
当您退出程序时,它所拥有的一切都消失了。包括链表和非链表、数组、solo 对象等等。
如果你想让某些东西持久存在,你必须保存它,然后加载它。就像在文本编辑器中一样,您使用加载和保存。
有完整的库可以帮助解决这个问题,您可以从boost::serialization 开始。
链表本身与数据持久化无关。
与其他数据结构相比,链表具有特定的性能特征。不知道找到特定元素可能需要多长时间,可能必须遍历整个列表(线性时间),但是插入和删除总是花费相同的固定时间(恒定时间)。
您可能想了解 STL 容器,因为它们内部具有相似的数据结构:在哪种情况下我应该使用特定的 STL 容器?
如果您希望数据在应用程序运行时间之外持续存在,您可以研究文件、数据库、网络通信或任何可能满足您特定需求的持久性机制的读/写。
链表的要点在于它是一种灵活的数据结构供您的代码使用 - 它不像数组那样具有固定长度,因此您可以根据需要添加和删除项目。
人们谈论动态内存分配的原因是因为它的内存分配取决于程序的运行时行为,它可能会根据它读取的数据而改变。这与静态内存分配相反,静态内存分配对于每次运行的给定代码路径基本相同,并且对于某些问题更难处理。但是,在某些嵌入式系统上,这是您唯一的选择,并且在某些情况下,在静态内存分配中工作也可以更快(动态分配往往会带来速度损失)。
整个话题其实挺复杂的,经常让我头疼。
动态分配的内存不会在程序运行之间持续存在 - 操作系统会在程序关闭时将其全部清除 - 因此动态内存分配和数据持久性之间没有关系。为此,您必须使用其他机制,通常存储在磁盘上。进程消失后您无法取回内存,这是现代“受保护内存”多任务模型的精髓,您无法访问甚至查看属于其他进程的内存。“其他进程”包括同一可执行文件的后续运行。