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.

questionAnswers(11)

yourAnswerToTheQuestion