Detalhes de implementação do ponteiro em C
Eu gostaria de saberarquiteturas que violam os pressupostos Eu listei abaixo. Além disso, gostaria de saber se alguma das suposições é falsa para todas as arquiteturas (isto é, se alguma delas estiver completamente errada).
sizeof (int *) == tamanho (char *) == sizeof (void *) == sizeof (func_ptr *)
A representação na memória de todos os ponteiros para uma determinada arquitetura é a mesma, independentemente do tipo de dados apontado.
A representação na memória de um ponteiro é o mesmo que um inteiro do mesmo comprimento de bits da arquitetura.
Multiplicação e divisão de tipos de dados de ponteiro são proibidos apenas pelo compilador. NOTA: Sim, eu sei que isso é sem sentido. O que quero dizer é - há suporte de hardware para proibir esse uso incorreto?
Todos os valores de ponteiro podem ser convertidos em um único inteiro. Em outras palavras, que arquiteturas ainda utilizam segmentos e deslocamentos?
Incrementar um ponteiro é equivalente a adicionarsizeof(the pointed data type)
para o endereço de memória armazenado pelo ponteiro. E sep
é umint32*
entãop+1
é igual ao endereço de memória 4 bytes depoisp
.
Eu sou mais usado para ponteiros sendo usados em um espaço de memória virtual contíguo. Para esse uso, geralmente consigo pensar neles como endereços em uma linha numérica. Veja a pergunta sobre estouro de pilhaComparação de ponteiros.