Aracılığıyla paylaş


İş Parçacığı Yığını Boyutu

Her yeni iş parçacığı veya fiber, hem ayrılmış hem de başlangıçta işlenen belleklerden oluşan kendi yığın alanını alır. Ayrılmış bellek boyutu, sanal bellekteki toplam yığın ayırmasını temsil eder. Bu nedenle ayrılmış boyut sanal adres aralığıyla sınırlıdır. Başlangıçta işlenen sayfalar başvurulana kadar fiziksel bellek kullanmaz; ancak, sayfa dosyasının boyutu ve fiziksel belleğin boyutu olan sistem toplam işleme sınırından sayfaları kaldırır. Sistem, ayrılmış yığın belleğinden, yığın ayrılmış boyuta ulaşana (yığın taşmasını önlemek için koruma sayfası olarak kullanılan) bir sayfa eksi bir sayfaya ulaşana veya sistemin belleği o kadar az olana kadar gerekli olan ek sayfaları işler ve işlem başarısız olur.

Mümkün olduğunca küçük bir yığın boyutu seçmek ve iş parçacığının veya fiberin güvenilir bir şekilde çalışması için gereken yığını işlemek en iyisidir. Yığın için ayrılmış olan her sayfa başka bir amaçla kullanılamaz.

İş parçacığı çıktığında bir yığın serbesttir. İş parçacığı başka bir iş parçacığı tarafından sonlandırılırsa serbest değildir.

Ayrılmış ve başlangıçta kaydedilmiş yığın belleği için varsayılan boyut yürütülebilir dosya üst bilgisinde belirtilir. İstenen bayt sayısını ayırmak veya işlemek için yeterli bellek yoksa iş parçacığı veya fiber oluşturma işlemi başarısız olur. Bağlayıcı tarafından kullanılan varsayılan yığın ayırma boyutu 1 MB'tır. Tüm iş parçacıkları ve fiberler için farklı bir varsayılan yığın ayırma boyutu belirtmek için modül tanımı (.def) dosyasında STACKSIZE deyimini kullanın. İşletim sistemi, belirtilen boyutu sistemin ayırma ayrıntı düzeyinin en yakın katına (genellikle 64 KB) yuvarlar. Geçerli sistemin ayırma ayrıntı düzeyini almak için GetSystemInfo işlevini kullanın.

İlk işlenen yığın alanını değiştirmek için CreateThread, CreateRemoteThreadveya CreateFiberişlevinindwStackSizeparametresini kullanın. Bu değer en yakın sayfaya yuvarlanmış. Genellikle, yedek boyutu yürütülebilir üst bilgide belirtilen varsayılan yedek boyutudur. Ancak, dwStackSize tarafından belirtilen başlangıçta işlenen boyut varsayılan yedek boyutundan büyük veya buna eşitse, yedek boyutu bu yeni işleme boyutunun 1 MB'ın en yakın katına yuvarlanmış olmasıdır.

Ayrılmış yığın boyutunu değiştirmek için createThreadveya CreateRemoteThreaddwCreationFlags parametresini STACK_SIZE_PARAM_IS_A_RESERVATION olarak ayarlayın ve dwStackSize parametresini kullanın. Bu durumda, başlangıçta işlenen boyut yürütülebilir üst bilgide belirtilen varsayılan boyutdur. Fiberler için CreateFiberExdwStackReserveSize parametresini kullanın. kaydedilen boyut dwStackCommitSize parametresinde belirtilir.

SetThreadStackGuarantee işlevi, herhangi bir yığın taşması özel durumu sırasında kullanılabilir olacak çağrı iş parçacığı veya fiber ile ilişkili yığının en düşük boyutunu ayarlar.