Diferença entre comportamentos de setrlimit e limite stack

1

Estou vendo uma diferença de comportamento ao definir o tamanho da pilha do shell e de dentro do meu programa c. A questão é que eu tenho uma função que possui um grande conjunto de variáveis locais (grandes matrizes).

Se eu fizer o seguinte

limit stack 256000

meu programa c continua sem falha Mas o mesmo valor de dentro falha na chamada de função

As primeiras linhas de main, antes de a função ser chamada, são as seguintes -

struct rlimit lim = {256000*1024, 256000*1024};
int x=setrlimit(RLIMIT_STACK, &lim);
if(x!=0) {
    printf("Error in setrlimit);
}

Não há erro emitido pelo setrlimit.

Adicionando a isso, parece que é específico para certas plataformas (SuSE 11) e não acontece em todos os oses.

Como posso garantir que o tamanho da pilha aumentada pelo meu programa seja efetivo? Outra coisa é que, mesmo que eu coloque valores enormes em setrlimit, não há efeito.

    
por amisax 19.01.2017 / 07:12

1 resposta

0

a maneira como setrlimit (RLIMIT_STACK) é aplicado é específica da plataforma e diverge amplamente.

Se o que você quer é garantir que o limite seja aumentado para o seu processo, a melhor maneira é configurá-lo no shell antes que o processo seja iniciado (como você apontou na sua pergunta), desde então ele terá aplicado independentemente de seu processo ser ou não encadeado ou quais são as especificidades da implementação que sua plataforma segue.

    
por 06.12.2018 / 22:02

Tags