【问题标题】:What is the significance of Dynamic data structure(like linked list)动态数据结构(如链表)的意义是什么
【发布时间】:2013-06-03 23:24:57
【问题描述】:

一旦创建链表的程序在不删除动态内存的情况下关闭,并且我知道需要删除动态内存,那么我如何在重新打开程序后让它恢复工作,如果我无法取回链表那么链表有什么用

【问题讨论】:

  • 您认为链表与程序多次运行之间的持久性有什么联系?
  • 你可能想看看序列化。
  • 程序终止时将删除动态内存。例如,链表的目的是在您不知道需要多少项目的情况下,因此简单的数组将不起作用。
  • 肯定会的。当程序终止时,操作系统将为您进行清理。但依赖它并不是一种好的做法。
  • 我想在@Sqeaky 的评论中添加一点,虽然在退出之前释放堆内存并不是绝对必要的,但如果您始终以确保(例如使用适当的智能指针类)的方式进行编码,您'当您稍后扩展代码并最终得到一个与以前不同的退出点时,会减少内存泄漏等错误。

标签: c++ c memory-management dynamic linked-list


【解决方案1】:

当你退出程序时,一切都消失了。包括链表和非链表、数组、solo对象等等。

如果你想让某些东西持久存在,你必须保存它,然后加载它。就像在文本编辑器中一样,您使用加载和保存。

有完整的库可以帮助解决这个问题,您可以从 boost::serialization 开始。

【讨论】:

  • 当然可以,但是这里的效果如何?你应该在它建立之前重新表述你的问题。
  • @Ankit 在某种程度上,在内心深处,他们使用指针。但这与此答案或您的问题无关。
  • @Ankit 好的,在 C 语言中,指针都暴露在链表的接口中。在 C++ 中,情况不一定如此。那又怎样?
【解决方案2】:

链表本身与数据持久化无关。

链表与其他数据结构相比具有特定的性能特征。不知道找到特定元素可能需要多长时间,可能必须遍历整个列表(线性时间),但是插入和删除总是花费相同的固定时间(恒定时间)。

您可能想了解 STL 容器,因为它们内部具有相似的数据结构:In which scenario do I use a particular STL container?

如果您希望数据在应用程序运行时间之外持续存在,您可以研究文件、数据库、网络通信或任何可能满足您特定需求的持久性机制的读/写。

【讨论】:

    【解决方案3】:

    链表的要点在于它是一种灵活的数据结构供您的代码使用 - 它不像数组那样具有固定长度,因此您可以根据需要添加和删除项目。

    人们谈论动态内存分配的原因是因为它的内存分配取决于程序的运行时行为,它可能会根据它读取的数据而改变。这与静态内存分配相反,静态内存分配对于每次运行的给定代码路径基本相同,并且对于某些问题更难处理。但是,在某些嵌入式系统上,这是您唯一的选择,在某些情况下,在静态内存分配中工作也可能更快(动态分配往往会带来速度损失)。

    整个话题其实挺复杂的,经常让我头疼。

    动态分配的内存不会在程序运行之间持续存在 - 操作系统会在程序关闭时将其全部清除 - 因此动态内存分配和数据持久性之间没有关系。为此,您必须使用其他机制,通常存储在磁盘上。在进程消失后,您无法取回内存,这是现代“受保护内存”多任务模型的精髓,您无法访问甚至查看属于其他进程的内存。 “其他进程”包括同一可执行文件的后续运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2010-09-23
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多