Tag: MEMORY-ALIGNMENT
Quiero calcular la dirección alineada. ‘label’ debe alinearse en un límite de 4 bytes. bits 32 mov eax, label end: ; aquí está el final del programa align 4 label: Este código nasm produce 8 bytes. $ nasm -f bin test.nasm -o test.o $ ndisasm -o 0x0 -b 32 test.o . . . Read more
struct CustomData { char flag; int count; double value; }; CustomData custom_data{}; char *buf = new char[sizeof(CustomData) + 3]; memcpy(buf + 3, &custom_data, sizeof(CustomData)); CustomData* ptr = (CustomData *)(buf + 3); ptr->count = 10; ptr->value = 20.0; Tengo un búfer de memoria compuesto por algunos bytes de encabezado y una . . . Read more
Observé que gcc y clang compilan el siguiente código de manera diferente: struct { long double ld[1]; } ld1; struct { long double ld[2]; } ld2; struct { long double ld[3]; } ld3; gcc .comm ld1,16,16 .comm ld2,32,32 .comm ld3,48,32 clang .type ld1,@object # @ld1 .comm ld1,16,16 .type ld2,@object # . . . Read more
Desde este enlace he leído que los compiladores pueden emitir múltiples instrucciones para almacenar un único valor, lo cual hace que las variables intermedias se escriban en la memoria hasta que todas las instrucciones se ejecuten. Esto podría causar tearing en un entorno multi-hilo. Quiero confirmar, ¿es posible también tener . . . Read more
Esta puede parecer una pregunta muy estúpida, pero ¿cómo se realiza la operación de acceso de miembro en una estructura? Cuando escribes nombre_estructura.nombre_miembro, ¿cómo sabe la máquina a qué miembro se quiere acceder? Las estructuras se almacenan en un bloque contiguo de memoria con un poco de relleno (dependiendo) y . . . Read more