iPhone的堆栈大小是否固定? [英] Is the stack size of iPhone fixed?

查看:107
本文介绍了iPhone的堆栈大小是否固定?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试调整线程的堆栈大小时:

When I am trying to adjust of stack size of threads:

- (void)testStack:(NSInteger)n {
    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(dummy) object:nil];
    NSUInteger size = 4096 * n;
    [thread setStackSize:size];
    [thread start];
}

- (void)dummy {
    NSUInteger bytes = [[NSThread currentThread] stackSize];
    NSLog(@"%@", @(bytes));
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    for (NSInteger i = 126; i <= 130; i++) {
        [self testStack:i];
    }
    return YES;
}

在输出中,大小不变:

2015-06-19 11:05:06.912 Stack[52982:2082454] 524288
2015-06-19 11:05:06.913 Stack[52982:2082457] 524288
2015-06-19 11:05:06.913 Stack[52982:2082456] 524288
2015-06-19 11:05:06.913 Stack[52982:2082458] 524288
2015-06-19 11:05:06.913 Stack[52982:2082455] 524288

iPhone堆栈大小是否固定?

is the iPhone stack size fixed?

p.s.我正在iPhone 6 Plus调试模式下测试以上内容.

p.s. I am testing the above in iPhone 6 Plus, debug mode.

更新:在MacBook上的Simulator中运行时,可以调整堆栈:

UPDATE: the stack can be adjusted when running in the Simulator on MacBook:

2015-06-19 11:25:17.042 Stack[1418:427993] 528384
2015-06-19 11:25:17.042 Stack[1418:427994] 532480
2015-06-19 11:25:17.042 Stack[1418:427992] 524288
2015-06-19 11:25:17.042 Stack[1418:427991] 520192
2015-06-19 11:25:17.042 Stack[1418:427990] 516096

推荐答案

堆栈大小受设备限制,在大多数情况下,iPhone OS上的主线程不能超过1MB,也不能缩小.

The stack size is bounded on the device, and in most cases cannot exceed 1MB for the main thread on iPhone OS, nor can it be shrunk.

辅助线程允许的最小堆栈大小为16 KB,并且堆栈大小必须为4 KB的倍数.在线程创建时会在进程空间中预留该内存的空间,但是直到需要它们时,才会创建与该内存关联的实际页面.

The minimum allowed stack size for secondary threads is 16 KB and the stack size must be a multiple of 4 KB. The space for this memory is set aside in your process space at thread creation time, but the actual pages associated with that memory are not created until they are needed.

这篇关于iPhone的堆栈大小是否固定?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆