¿Se ha reparado el tamaño de stack del iPhone?

Cuando trato de ajustar el tamaño de stack de hilos:

- (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; } 

En la salida, el tamaño no cambia:

 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 

¿El tamaño de la stack del iPhone está arreglado?

ps Estoy probando lo anterior en iPhone 6 Plus, modo de debugging.

ACTUALIZACIÓN: la stack se puede ajustar cuando se ejecuta en el simulador en 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 

El tamaño de la stack está acotado en el dispositivo y, en la mayoría de los casos, no puede superar los 1 MB para el hilo principal en el iPhone OS, ni puede networkingucirse.

El tamaño de stack mínimo permitido para subprocesss secundarios es de 16 KB y el tamaño de la stack debe ser múltiplo de 4 KB. El espacio para esta memory se reserva en su espacio de process en el momento de creación de subprocesss, pero las páginas reales asociadas con esa memory no se crean hasta que son necesarias.

En realidad puedes configurarlo. No estoy seguro si esto cambió con iOS 10, pero en iOS 10.2.1 esto funciona. La única limitación es que el tamaño de la stack debe ser múltiplo de 4kb.

 pthread_attr_t tattr; int ret = pthread_attr_init ( &tattr ) ; size_t size; ret = pthread_attr_getstacksize(&tattr, &size); printf ( "Get: ret=%d,size=%zu\n" , ret , size ) ; size = 4096 * 512 ; ret = pthread_attr_setstacksize(&tattr, size); int ret2 = pthread_attr_getstacksize(&tattr, &size); printf ( "Set & Get: ret=%d ret2=%d,size=%zu\n" , ret , ret2 , size ) ;