Я просто хочу прояснить для себя вопрос о распределении памяти (если это так, как я могу назвать это правильно) в c на архитектуре x64.
У меня есть одна программа, которая просто выводит местоположение переменной в памяти.Я запускаю его несколько раз, а затем вижу странную вещь:
Строка кода:
printf("[*] test_val @ 0x%016llx = %d 0x%016llx\n", &test_val, test_val, test_val);
1-й раз:
[*] test_val @ 0x00005612f1edb050 = -72 0x00000000ffffffb8
2-й раз:
[*] test_val @ 0x000055ec3b64f050 = -72 0x00000000ffffffb8
3-й раз:
[*] test_val @ 0x00005577e99d4050 = -72 0x00000000ffffffb8
Кажется, что место в памяти переменной test_int
отличается каждый раз, за исключением первых 2,5 бит (00005) и последних 1,5биты (часть 050 не изменяется).
Не было бы никаких вопросов, но в книге, которую я изучаю по этому адресу, постоянно все время.Основное отличие состоит в том, что эта книга о 32-битной архитектуре.
Правильно ли я понимаю, что память распределяется динамически в системах x64?Есть ли способ «предсказать», где будет переменная, учитывая тот факт, что мы знаем последние 1,5 бита, в данном случае 050?