Em certas caixas Linux, as variáveis na pilha parecem ser inicializadas para 0 - por quê?

3

Eu tenho um programa com bugs que coloca uma variável na pilha e pode usá-la sem inicialização.

Eu pego o mesmo binário e o executo em diferentes caixas de Linux. Essas caixas têm CPUs diferentes (i5, i7), mas além disso, executam a mesma distribuição do Fedora.

Uma caixa, eu posso pegar o problema facilmente porque a variável tem dados aleatórios.

Em outra caixa, no entanto, as variáveis da pilha são sempre inicializadas para 0 (mesmo que não devam ser).

Estou tentando identificar a causa desse comportamento diferente. Onde devo olhar? O que pode possivelmente causar isso? Há algum recurso do kernel que possa afetar isso?

    
por Hennes 07.10.2013 / 19:05

2 respostas

2

Não há "deve" ou "não deve" para dados não inicializados . Pode ser o que for mais agradável. Todos os zeros são uma possibilidade - assim como todos, e o mesmo acontece com o lixo aleatório. De fato, todos os zeros são uma forma perfeitamente aceitável de lixo aleatório. Em vez de se preocupar com os dados não inicializados em caixas diferentes, inicialize-os e então (e somente então ) você pode saber o que "deveria ser".

    
por 09.10.2013 / 02:39
0

Em C, a inicialização de variáveis depende do nível de otimização quando o programa foi compilado.

O nível de otimização 3 não inicializou nenhuma variável na pilha.

gcc -O3 program.c -o program
    
por 23.11.2016 / 15:19