阅读本文https://developer.ibm.com/tutorials/l-memory-leaks/之后,我想知道是否有一种方法可以取消线程执行并避免内存泄漏。根据我的理解,联接功能正在释放分配的空间。其他命令也应该这样做。我感兴趣的东西如何加入释放内存空间和其他功能呢?有没有给女巫线程分配内存空间的功能?可以给出(映射)吗?我知道一个人不要为此疯狂,因为它代表了潜在的安全问题。但是仍然有办法实现这一目标吗?
答案 0 :(得分:1)
例如,如果我有第三方lib,则可以识别其线程,但是存在无法识别lib中已分配的内存空间的问题,或者我不知道该怎么做(lib是二进制文件)
如果该库不支持,则不能。您对该问题的了解略有偏离。谁分配内存都没有关系,是否仍然需要分配内存也很重要。如果该库提供了一些方法,使您不再需要分配内存,那么提供的方法也将提供释放内存的方法。如果该库无法提供不再需要分配内存的方式,则某种释放它的方法将无济于事。
对此类内容进行编码非常麻烦,应该在操作系统级别进行。
无法完成。操作系统无法知道分配了一些内存块的代码何时仍需要它,何时不需要。只有分配了内存的代码才可能知道这一点。
Posix允许取消但不能标识单个线程,并且并非所有Posix功能都可在Linux上使用。 Posix只是操作系统中stl内容的一层。
是的,因此POSIX并不是解决问题的地方。它需要了解应用程序,因此必须在应用程序层完成。如果需要此功能,请对其进行编码。如果您在他人的代码中需要它,而他们没有提供,请与他们联系。据推测,如果他们的代码是恰当的并且合适的,它可以通过某种方式满足您的需求。如果不是这样,您的抱怨就是代码无法满足您的需求。
我的想法是,在Linux的某个地方,如果启用了某些选项,则系统会跟踪线程在堆上进行了哪些分配,因为我默认情况下什么都不知道。
那没有帮助。哪个线程分配的内存绝对不会告诉您何时不再需要它。只有决定了所需代码的代码才能告诉您何时不再需要它。因此,如果某些分配内存的代码需要这样做,则该代码必须实现这一点。如果实现该代码的人没有提供这种便利,则意味着他们认为不需要它。您不妨问问他们为什么做出这个决定。他们的答案可能会让您感到惊讶。
但是我看到这个严重问题没有答案。
答案是编写所需的代码。如果是别人的代码而他们没有编写代码,那么他们就认为您不需要它。他们很可能是对的。但是如果他们错了,那就不要使用他们的代码。