Windows kullanıyorsanız, bunun nedeni PE yapısıdır.
Sizin heap
değişken saklanır .data
dosyasının bölümüne ve adresi bu bölümün başlangıcında dayalı olarak hesaplanır. Her bölüm bağımsız olarak bir adrese yüklenir, ancak başlangıç adresi sayfa boyutunun katlarıdır. Başka değişkeniniz olmadığından, adresi büyük olasılıkla .data
bölüm başlangıcıdır , bu nedenle adresi yığın boyutunun katı olacaktır.
Örneğin, bu senin kodun derlenmiş, Windows sürümünün tablosudur:
bölümde derlenmiş koddur ve were sizin içeren değişken. PE'niz belleğe yüklendiğinde, bölümler farklı bir adrese yüklenir ve bu bölüm tarafından döndürülür ve sayfa boyutunun katı olur. Ancak her değişkenin adresi, şu anda bir sayfa boyutu olan bölümün başlangıcına göredir. Böylece her zaman düşük rakamlarda sabit bir sayı göreceksiniz. Bölümün başlangıcındaki göreli adres derleyici, derleme seçenekleri vb. Temelli olduğundan, aynı koddan ancak farklı derleyicilerden farklı sayılar görürsünüz, ancak her yazdırılacak zaman sabittir..text
.data
heap
VirtualAlloc()
heap
Kodu derlediğimde , bölüm başladıktan sonra baytlara heap
yerleştirildiğini fark ettim . Bu kodu her çalıştırdığımda adresim bitiyor .0x8B0
.data
0x8B0