![]() |
1
4
进程可用的虚拟内存是4GB地址空间中的2GB。每个线程默认为其堆栈空间保留大约1MB的虚拟内存空间。因此,在虚拟内存耗尽之前,Win32应用程序的活动线程数限制为大约2000个。 虚拟内存是应用程序在现代虚拟内存操作系统(如Windows)中获得的内存。在win32上发生的是,您的应用程序得到一个2GB的虚拟地址空间。当您的程序调用new或malloc时,在经过几个层的隧道挖掘之后,会在磁盘上为您的应用程序分配空间—在页面文件中。当CPU指令试图访问该内存时,硬件异常被抛出,内核将物理RAM分配给该区域,并从页面文件中读取内容。 因此,不管PC中的物理RAM如何,每个应用程序都认为它可以访问整个2GB。 虚拟内存是2GB空间已用光的数量。 每个线程(见上文)保留1 MB的虚拟地址空间,以便其堆栈增长。其中大部分1MB只是保留空间(希望如此),没有RAM或页面文件的支持。 关闭线程句柄时,不关闭线程。线程由另一个调用TerminateThread的线程终止(该线程泄漏线程堆栈和某些其他资源,因此永远不要使用它)、调用exitThread()本身或退出线程过程。 因此,有了2000个调用限制、不匹配的coInitialize和couninitialize调用,我会说线程没有完全退出。2000个工作线程中的每一个在完成工作后都在做一些事情,而不是退出。 |
![]() |
2
3
这个
关于虚拟内存:它表示保留的内存,但还不一定要使用。泄漏的内存(或至少部分内存)与句柄泄漏有关。当线程的最后一个句柄关闭时,Windows将释放为其保留的虚拟内存。 |
![]() |
Ford O. · Haskell中的句柄是半关闭错误? 8 年前 |
|
Manuel · matlab积分函数句柄嵌套 10 年前 |
![]() |
Cazs · 如何在jquery中设置多个句柄 11 年前 |
|
karl nickel · AS3通过函数应用格式 12 年前 |