gpt4 book ai didi

objective-c - NSThread setStackSize 没有设置线程的大小

转载 作者:行者123 更新时间:2023-12-04 05:41:12 25 4
gpt4 key购买 nike

我正在使用 NSThread并为其设置堆栈大小,如下所示:

thread=[[NSThread alloc]initWithTarget:self selector:@selector(fibnocciForLoop) object:nil];
[thread setStackSize:12];
[thread start];

正如为 -[NSThread setStackSize:] 编写的 Apple 文档:

Discussion
You must call this method before starting your thread. Setting the stack size after the thread has started changes the attribute size (which is reflected by the stackSize method), but it does not affect the actual number of pages set aside for the thread.



但是当我稍后在调试器中检查堆栈大小时,我没有得到我设置的值:
print (int)[thread stackSize]
$1 = 524288

我的问题是为什么 setStackSize:如果什么都不做,方法是否存在?

请让我知道我错在哪里,或者是否是 setStackSize: 的 API没有任何用处?

编辑:
对于这个问题,请参阅@Josh Caswell 的回答,我错过了 4K 中的 K,因此上面的代码可以正常工作,如下所示:
  thread=[[NSThread alloc]initWithTarget:self
selector:@selector(fibnocciForLoop) object:nil];
[thread setStackSize:12*4096];//4K=4096
[thread start];

此问题的扩展:

有人可以解释一下为什么 Apple 给了这个方法 setStackSize,以及如何以及何时使用这个特定的方法,因为它需要用户进行大量计算来计算将使用/将使用多少字节。

我想知道它在 NSThread 中的确切用途?

谢谢!

最佳答案

setStackSize: documentation还说:

The stack size for the receiver. This value must be in bytes and a multiple of 4KB.



12 不是 4K 的倍数,所以您的 NSThread忽略您的设置并可能使用其默认设置,它似乎是 128 页(iOS(和 OS X)上的页面为 4KB)或 4 MB。

不清楚您想要 12 的含义,但是如果您想要 NSThread,您需要将其更改为指示至少 4096 个字节。使用您的设置。

关于objective-c - NSThread setStackSize 没有设置线程的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11220951/

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