Инициализация массива целых чисел в C, как он выглядит в RAM под x86? - PullRequest
0 голосов
/ 23 марта 2012
u_int32_t ip6_address[1][4] = { {0x00000001, 0x0, 0x0, 0x12345678} };
  1. Как это будет выглядеть в байт-байт шестнадцатеричной памяти RAM при работе на процессоре ПК x86?

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

Иногда проще всего посмотреть:

$ cat example.c 
#include <stdint.h>
uint32_t ip6_address[1][4] = { {0x00000001, 0x0, 0x0, 0x12345678} };
$ make example.o
clang -Wall -Wextra -pedantic   -c -o example.o example.c
$ otool -d example.o 
example.o:
(__DATA,__data) section
0000000000000000    01 00 00 00 00 00 00 00 00 00 00 00 78 56 34 12 

Вы можете сделать что-то аналогичное для вашего второго примера.

1 голос
/ 23 марта 2012

Вы можете сбросить любую область памяти, проверив ее с помощью unsigned char *

void dump(void *address, size_t bytes) {
    unsigned char *p = address;
    while (bytes--) printf("%02X ", *p++);
    puts("");
}
...