Memory management 处理围棋中的大内存块

Memory management 处理围棋中的大内存块,memory-management,go,Memory Management,Go,是否有任何指南描述了Go如何有效地解决以下用例: 应用程序接收由分隔名称组成的100M字符串,每个名称最长可达1M。例如:“本;亚伦;里奇;唐娜……”。需要按字母顺序打印相同的名称,而不会显著增加内存使用量(假设总共使用了150M RAM) 给定两个具有巨大内存块的集合(假设每个集合的内存块最多为1M),并且需要有效地将少量内存块从一个集合移动到另一个集合(无需显著的额外内存分配) 我假设您不能修改字符串,因此字符串和字符串是不可变的(不是[]字节),因为删除任何此类限制都会使任务变得微不足道。

是否有任何指南描述了Go如何有效地解决以下用例:

  • 应用程序接收由分隔名称组成的100M字符串,每个名称最长可达1M。例如:“本;亚伦;里奇;唐娜……”。需要按字母顺序打印相同的名称,而不会显著增加内存使用量(假设总共使用了150M RAM)
  • 给定两个具有巨大内存块的集合(假设每个集合的内存块最多为1M),并且需要有效地将少量内存块从一个集合移动到另一个集合(无需显著的额外内存分配)
  • 我假设您不能修改字符串,因此字符串和字符串是不可变的(不是[]字节),因为删除任何此类限制都会使任务变得微不足道。如果是这样,那么您可以创建带有字符串索引的附加结构,并在其中进行排序(n*log(n))次。只需实现
    Less
    ,它会比较原始字符串中的子字符串
  • 第二个很简单——只需使用链表即可

  • 名字的数量有上限吗?有5000万个名称,每个名称1个字符吗?@Tomas,让我们假设没有限制-但我对一般概念更感兴趣-因此任何建议都会有帮助。我强烈建议尝试一个简单的实现,分析它,然后发布代码/结果,如果它没有您需要的性能。@elithrar似乎这是一条路,我只是想问一下,在开始之前我是否应该知道一些事情。你认为索引不会占用很多内存,尤其是在围棋中吗?关于2。那么代码到底是什么样子的呢?dest.PushBack(src.Remove(elem))?@noonex,go内存布局非常简单,您可以看到所有内容是如何分配的。否则,算法和数据结构与任何其他语言中的相同。