gpt4 book ai didi

c++ - CreateThread 的保留和提交参数之间有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 20:12:59 25 4
gpt4 key购买 nike

CreateThread Windows API 函数的保留参数和提交参数有什么区别?

我无法理解以下几行..

The reserve argument sets the amount of address space the system should reserve for the thread's stack. The default is 1 MB. The commit argument specifies the amount of physical storage that should be initially committed to the stack's reserved region.

这两行你会在这段解释c++中CreateThread函数的一个参数的段落中找到它们

cbStackSize

The cbStackSize parameter specifies how much address space the thread can use for its own stack. Every thread owns its own stack. When CreateProcess starts a process, it internally calls CreateThread to initialize the process' primary thread. For the cbStackSize parameter, CreateProcess uses a value stored inside the executable file. You can control this value using the linker's /STACK switch:

/STACK:[保留][, commit]

The reserveargument sets the amount of address space the system should reserve for the thread's stack. The default is 1 MB. The commitargument specifies the amount of physical storage that should be initially committed to the stack's reserved region.

最佳答案

区别是虚拟内存和物理内存的区别。

在任何名副其实的操作系统中,包括 Windows,指针并不直接指定内存芯片上的位置。它们位于特定于进程的虚拟内存空间中,然后操作系统分配物理内存芯片的一部分来存储进程实际按需存储任何内容的部分内容。并且可能会在 RAM 耗尽时将一些数据交换到磁盘。

reserve 是为堆栈分配的连续虚拟内存块的大小。低于和高于该范围的其他东西将被存储,因此储备对堆栈可以增长的大小设置了上限。

幸运的是虚拟内存通常是充足的。在 32 位 Windows 上有 2GiB,如果使用 /LARGEADDRESSAWARE 标志链接则有 3GiB,如果为 64 位 (x64) 编译则有大量内存。唯一的异常(exception)是 WinCE 5.0 之前,你只有 32MiB。因此,除非您要创建数以亿计的线程,否则您可以在这里大方一些,而且您应该大方一些,因为如果您没有足够多的线程,进程就会崩溃。

commit 是系统应该为堆栈预分配的物理内存的大小。这使得系统立即在物理内存中获得一些空间,这是一种共享资源,可能是稀缺的。它可能需要交换或丢弃它以前的内容才能得到它。当你超过它时,系统会以小延迟为代价自动加扰一些。因此,如果您确实需要内存,那么通过增加此处的值,您获得的唯一好处是可以加快一点速度。如果你不这样做,它会变慢。所以你在这里应该保守一些。

栈是放置局部变量的地方。如果您使用大型本地缓冲区——这通常是合理的,因为堆栈分配比堆分配快得多(通过 malloc/new/任何使用 std::allocator)——你需要预留足够的堆栈。如果您不这样做,1MiB 通常就足够了。

关于c++ - CreateThread 的保留和提交参数之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24260638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com