Makale numarası: 100775 - Son Gözden Geçirme: 03 Mayıs 2005 Salı - Gözden geçirme: 3.1 Windows NT tabanlı uygulamalar için denetimi yığın açıklaması
ÖzetWindows NT bu uygulamanın denetimini yığın yığın içinde <a2>MS-DOS</a2> uygulama denetimi farklıdır. Daha fazla bilgiBir MS-DOS uygulaması, yığın taşması yalnızca yazılım tarafından algılanır. Varsayılan olarak, derleyici __chkstk() işlevine bir çağrı her işlev prolog kodunu ekler. __Chkstk() işlevi, bir işlev gerektirir yığın alanı yığın alanı miktarı ile karşılaştırır. Geçerli işaretçi yığın ve yığın ayırma istenen işlevi sorunları, taşma hata EXE üstbilgisinde belirtilen en büyük yığın boyutunu aşıyor. Microsoft Windows NT işletim sisteminde, yığın taşması, donanım ve yazılım sayfa koruma mekanizmaları kullanarak birlikte çalışan tarafından algılanır. Her yeni Windows NT işleminde, bir en büyük ve ayrılmış yığın boyutu ve kaydedilmiş olan ilk yığın tahsisat vardır. Kaydedilmiş bellek, fiziksel işleme ayrılır ve sayfa dosyası tarafından yedeklenir; göreceli olarak "pahalı" bir kaynaktır. Ayrılan bellek, gerçek bellek eşlemeli adres alanıdır; göreceli olarak "ucuz" bir kaynaktır. Yığın arttıkça yığın bellek Tamamlanan kısmını ayrılmış veya kaydedilmemiş belleğe taşır. Bu durumda, bir sayfa hatası oluşur ve işletim sistemi bellek sayfa başka bir yığına kaydeder. Yığın zaten belirtilen en büyük boyutuna ulaşmışsa, sayfa hatası oluşursa, sistem bir yığın taşması özel durumu bildiriyor. Bu otomatik büyüme yöntemi koruma sayfası, Tamamlanan kısmını bellek ile bitişik bir ayrılmış, kaydedilmemiş, bellek sayfa kullanır. Uygulama koruma sayfası dokunduğundan, işletim sistemi, sayfa ve kaydedilmemiş bir sonraki sayfasında olacağı yeni koruma sayfasını kaydeder. Yalnızca koruma sayfası ve yığın bellek için otomatik bir yığın büyüme çalışır, 4000 ya da bir sayfa, artırmalarla ulaşması gerekir. Koruma sayfası dokunduğu önce uygulama yığın bellek rezerve edilmiş ancak kaydedilmemiş başka bir sayfa üzerinde bulunduğu bir normal sayfa hata özel durumu oluşuyor ve öngörülemeyen davranışlara neden olabilir. Bir işlev a?a??daki prolog, kod eklenirse, bu sorun oluşabilir: Hatayı önlemek için <a0></a0>, derleyici her yerel tahsisat 4000 aşıyor __chkstk() işlevini çağırır. MS-DOS sürüm gibi Windows NT __chkstk() işlevi için yığın taşması açıkça denetlemez. Yığın işaretçisi geçerli konumdan istenen tahsisi için her 4 K bellek adresleri yalnızca dokunduğu. Bu koruma sayfaları doğru sırada tetikler ve gerektiği gibi yığın için ek bellek tamamlar. Bu nedenle, derleyici komut satırı seçeneği /Ge anahtarı içerir ve prolog kodu, her zaman __chkstk() işlevi çağıran uygulama verimli olarak otomatik bir düzenek, yığın taşması algılaması gerçekleştirmek için işletim sisteminin desteklediği için onu olabilir gibi çalışmıyor. /Gs derleyici seçeneği anahtarı, tüm __chkstk() aramaları devre dışı bırakmaz. Devre dışı bunun yerine, yerel depolama en az 4 K gerektiren bu işlevlerin __chkstk() aramalarda bırakır. /Gs seçeneği derleyici varsayılan davranıştır. /Gs seçeneği, isteğe bağlı bir parametre, eşik değerini kabul eder. Bir işlevin yerel yığın ayırma belirtilen eşiğini aşarsa, derleyici, __chkstk() arama işlevi prolog ekler. Varsayılan eşik 4096 bir kullanıcı modu uygulamasının Windows NT doğru olarak çalışması için gereklidir. Tüm __chkstk() aramalarının bastırmak için <a0></a0>, bir yapay üst eşiğe gibi belirtmeniz / Gs999999. / Gs0 seçeneği /Ge seçeneği ile aynı işlevi vardır ve her işlevinde __chkstk() çağırmak için derleyici bildirir. Yığın tam olarak kaydedilmiş olduğu veya yığın büyüme mekanizması kullanılabilir değilse, bir ortamda kodu yürütür, varsayılan değerini değiştirmek yararlı olabilir. Daha fazla bilgi için /Gs derleme seçenek ve Visual C++ Books Online'da check_stack Önişlemci pragma başvurun. Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:100775
(http://support.microsoft.com/kb/100775/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukMakale çevirileri |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste