Jika Anda menggunakan Windows, alasannya adalah struktur PE .
heapVariabel Anda disimpan di .databagian file dan alamatnya dihitung berdasarkan awal bagian ini. Setiap bagian dimuat dalam alamat secara independen, tetapi alamat awalnya adalah kelipatan dari ukuran halaman. Karena Anda tidak memiliki variabel lain, alamatnya mungkin mulai dari .databagian, jadi alamatnya akan lebih dari satu ukuran chunk.
Sebagai contoh, ini adalah tabel dari Windows versi dikompilasi dari kode Anda:
The .textseksi yang kode dikompilasi Anda dan .databerisi Anda heapvariabel. Ketika PE Anda dimuat ke dalam memori, bagian dimuat di alamat yang berbeda dan yang dikembalikan oleh VirtualAlloc()dan akan menjadi beberapa ukuran halaman. Tetapi alamat masing-masing variabel relatif terhadap awal bagian yang sekarang menjadi ukuran halaman. Jadi, Anda akan selalu melihat nomor tetap pada digit yang lebih rendah. Karena alamat relatif heapdari awal bagian didasarkan pada kompiler, opsi kompilasi, dll. Anda akan melihat nomor berbeda dari kode yang sama tetapi kompiler berbeda, tetapi setiap kali apa yang akan dicetak diperbaiki.
Ketika saya mengkompilasi kode, saya perhatikan heapditempatkan pada 0x8B0byte setelah memulai .databagian. Jadi setiap kali saya menjalankan kode ini, alamat saya berakhir 0x8B0.