Tengo el siguiente programa. Me pregunto por qué produce -4 en la siguiente máquina de 64 bits. ¿Cuál de mis suposiciones salió mal?c & gcc: Crecimiento y alineación de la pila: para una máquina de 64 bits
[ubuntu Linux 3.2.0-23-generiC# 36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux]
En el arriba de la máquina y del compilador gcc, por defecto b debe presionarse primero y un segundo. La pila crece hacia abajo. Entonces, b debería tener una dirección más alta y una dirección más baja. Entonces el resultado debería ser positivo. Pero tengo -4. ¿Alguien puede explicar esto?
Los argumentos son dos caracteres que ocupan 2 bytes en el marco de la pila. Pero vi la diferencia como 4 donde estoy esperando 1. Incluso si alguien dice que es debido a la alineación, me pregunto si una estructura con 2 caracteres no está alineada en 4 bytes.
#include <stdio.h> #include <stdlib.h> #include <unistd.h> void CompareAddress(char a, char b) { printf("Differs=%ld\n", (intptr_t)&b - (intptr_t)&a); } int main() { CompareAddress('a','b'); return 0; } /* Differs= -4 */
En caso de que alguien está interesado, para salvar a tener que llevar a cabo el cita de wikipedia, el documento oficial AMD64 ABI se puede encontrar aquí: http://www.x86-64.org/documentation/abi.pdf –