2010-11-03 32 views
7

Windows Internal book 5th edition vs .NET yığını şu Windows işletim sistemi için her diş 4K veya 16K (sisteme bağlı olarak) verilir anlıyoruz 360., Windows yığını

 
The stack size for the initial thread is taken from the image—there’s no way 
to specify another size. 

sayfasında yorumunu yığını ve vardır boyut sabittir.

Peki, .NET'deki yığın nasıl olur?

  • Yığın ne kadar büyük?
  • Yığının boyutu sabit veya değişken mi?
  • Her bir iş parçacığı için ayrılmış olan Windows'da olduğu gibi mi?
+0

ilgili: http://stackoverflow.com/questions/1042345/how-do-you-change-default-stack-size-for-managed-executable-net –

cevap

9

Evet başlangıç ​​iplik için boyut .exe dosya başlığında bir değer tarafından belirlenir CreateThread API kullanarak mesajları oluşturmak için bir kod örneği. Gerekirse, programın çalıştırabileceği herhangi bir kod önce iş parçacığı oluşturan işletim sistemidir. Programın giriş noktasını çağırır CorExeMain().

Kullandığınız yönetilen derleyici, bu değeri EXE dosya üstbilgisine yazar. Mevcut .NET derleyicileri, x64 veya herhangi bir CPU, x64'ü hedeflediğinizde 4 MB'ı hedeflediğinizde 1 MB'yi seçer. Ancak bu sabit değildir, değeri Editbin.exe yardımcı programı/STACK komut satırı seçeneği ile değiştirebilirsiniz. Bir 2MB yığını almak için bu post-build olayı kullanabilirsiniz: Kendinizi kontrol altında oluşturmak parçacığı için

set path=%path%;$(DevEnvDir);$(DevEnvDir)..\..\vc\bin 
    editbin.exe /STACK:2097152 "$(TargetPath)" 

yığın boyutunu, boyut belirtmenizi sağlar Konu sınıf yapıcı has overloads. Klibi 256 KB değerine düşürürse, çok küçük yapamazsınız. Bu gerekli, tam zamanında derleyici ayrıca yığını kullanır.

0

Konuyla ilgili bir similar discussion.

Soru

dokümantasyon ipler "varsayılan yığın boyutu" 1MB olduğunu gösterir. Çalışma "varsayılan", değiştirilebileceğini ima eder.

StackSize .NET'te değiştirmek mümkün mü? Öyleyse nasıl?

Cevap

Maalesef hayır. Okuduğunuz belgeler, sistemdeki yeni iş parçacıklarının oluşturulması için Thread sınıfı tarafından işlenen idi. CreateThread API işlevi yığın boyutunu ayarlamanıza olanak tanır ve 'u .NET'ten arayabilirsiniz. Ancak, bunun iyi bir fikir olup olmadığını bilmiyorum, çünkü ben çalışma zamanının bu iş parçacığını nasıl algılayacağını bildiğimden beri . Burada

http://www.codeproject.com/KB/threads/Threads_1.aspx