他们说压缩垃圾收集器比传统的内存管理更快,因为它们只需要收集活动对象,并通过在内存中重新排列它们,所以一切都在一个连续的块中,最终没有堆碎片.但是如何快速完成呢?在我看来,这相当于bin-packing问题,它是NP难的,并且在我们关于计算的当前限制内的大数据集上无法在合理的时间内完成.我错过了什么?
假设我有以下字符串:
string str1 = "Hello World!";
string str2 = str1.SubString(6, 5); // "World"
Run Code Online (Sandbox Code Playgroud)
我希望在上面的例子str2中不复制"World",但只是最终成为一个新的字符串,指向相同的内存空间,只是它以6的偏移量和5的长度开始.
实际上我正在处理一些可能非常长的字符串,并且由于性能原因我对它在幕后的工作方式感兴趣.我不熟悉IL调查此事.