2010-02-13 19 views
5

"स्टैक थ्रैश" क्या है? या "एक ढेर थ्रैश"? (चूंकि मुझे परिभाषा नहीं पता है, मुझे यकीन नहीं है कि यह एक गणनीय या अनगिनत शब्द है।)"स्टैक थ्रैश" क्या है?

+0

यह एक वाक्यांश नहीं है जिसे मैंने कभी सुना है - संदर्भ क्या है? मैंने लोगों को यह कहते हुए सुना है कि उन्होंने 'स्टैक को ट्रैश किया है', जिसका अर्थ है कि उन्होंने एक खराब पॉइंटर का उपयोग किया और कुछ स्टैक को ओवरराइट किया, जिससे कार्यक्रम अजीब और रोमांचक (और डीबग करने के लिए कठिन) तरीके से दुर्घटनाग्रस्त हो गया। –

+0

मैंने आमतौर पर सुना है कि "स्टैक को तोड़ना" कहा जाता है। –

+0

कचरा या थ्रैश .. आईएमओ यह स्टैक स्मैशिंग जैसा कुछ हो सकता है। सुनिश्चित नहीं – sud03r

उत्तर

4

ढेर थ्रैशिंग ढेर थ्रैशिंग की तरह है, लेकिन ढेर पर है।

वहां, अब समझाया गया है।

ओह, आप अधिक जानकारी चाहते हैं हुह?

यदि आप एक प्रोसेसर पर एक स्टैक आधारित प्रोसेसर का अनुकरण करते हैं जो कि आप ढेर को थका रहे नहीं हैं।

यदि आपका सी कोड malloc और मुफ्त कोड की हर दूसरी पंक्ति है, तो आप ढेर को थका रहे हैं।

समस्या के रूप में स्टैक थ्रैशिंग का बिंदु यह है कि यदि आपने अपना कोड प्रोफाइल किया है, तो सीपीयू खर्च बहुत अधिक समय पॉपिंग और पुशिंग कर रहा है।

ढेर थ्रैशिंग के लिए malloc() & मुक्त() आपके # 1 & # 2 सबसे अधिक उपयोग किए जाने वाले कार्यों के लिए।

अब कुछ सीपीयू (रॉकवेल कुछ बनाते हैं) वास्तव में हार्डवेयर में एक स्टैक आधारित भाषा चलाने के लिए अनुकूलित किए जाते हैं।

  • आंतरिक राम कि CPU के अंदर
  • कुछ रजिस्टरों ढेर के शीर्ष N kilobtyes कैश
  • सभी निर्देश ढेर रिश्तेदार

अजीब तरह से पर्याप्त, जावा वर्चुअल मशीन एक ढेर आधारित मॉडल है।

x86 हार्डवेयर पर वास्तव में गूंगा फोर्थ कार्यान्वयन चलाना स्टैक को फेंक देगा। फर्थ स्पेक पढ़ने के बाद आप जिस चीज को लिख सकते हैं, इसलिए आप आगे निर्देशों के लिए x86 मशीन कोड उत्सर्जित करें और इसे अनुकूलित न करें। फर्थ दोस्तों, मैं क्षमा चाहता हूं, मुझे पता है कि आपके प्रत्यारोपण बहुत बेहतर हैं।

पोस्टस्क्रिप्ट भी ढेर पर आधारित है, जो प्रारंभिक पोस्टस्क्रिप्ट प्रिंटर को रोमांचक बनाता है: उनके पास सीमित रैम और धीमी सीपीयू थी: और एक स्टैक-थ्रैशिंग भाषा चला। मुझे यकीन है कि इसे मूल चलाने के लिए मूल ऐप्पल लेजरराइटर जैसी चीजों में बहुत सारे प्रयास हुए। इसमें मोटोरोला 68000 सीपीयू (10ish) मेगाहर्ट्ज और 1 एमबी रैम आईआईआरसी पर चल रहा था।

फिर, स्टैक थ्रैशर्स।

क्या इससे मदद मिली?

+0

यदि मुझे मूल संदर्भ दोबारा मिल जाए, तो मैं इस परिभाषा को एक कोशिश दूंगा और देख सकता हूं कि यह फिट बैठता है या नहीं।लेकिन यह निश्चित रूप से समझ में आता है, स्वीकार करता है कि मैंने "थ्रैश" लिखा है और सवाल और कुंजी शब्द को संबोधित करता है, और यह शब्द की अंग्रेजी परिभाषा के अनुरूप है। बहुत बहुत धन्यवाद, टिम। – talkaboutquality

1

मुझे इस शब्द का कभी सामना नहीं हुआ है, और अग्रणी Google और विकिपीडिया हिट इसका वर्णन नहीं करते हैं।

हालांकि, यह डिस्क thrash के समान होता है जो डिस्क का भारी अक्षम उपयोग होता है। यह सीधे ढेर पर लागू नहीं होता है - जो कि किसी भी यांत्रिक से मेल नहीं खाता है। हो सकता है कि यह पेज फॉल्टिंग से संबंधित है जिसके परिणामस्वरूप यांत्रिक रूप से अक्षम संबंध होंगे। या कुछ महंगा कार्यकारी/कर्नेल उपचार द्वारा सही ओवरफ्लो ढेर।

शब्द के लिए कुछ संदर्भ मदद करेंगे।

+0

+1 मैं उदार हूँ ..: पी – sud03r

2

मैंने इस शब्द को फर्थ के संदर्भ में उपयोग किया है, जहां स्टैक फ्रेम एक्सेस की कमी को कभी-कभी स्टैक मैनिप्लेशंस ("स्टैक थ्रैशिंग") के अत्यधिक उपयोग की आवश्यकता होती है ताकि स्टैक के शीर्ष पर कुछ शब्द प्राप्त हो सकें।

इसके अलावा, This glossary इसे "लगातार स्टैक विस्तार (ओवरफ़्लो) और संकुचन (अंडरफ्लो)" के रूप में परिभाषित करता है। स्पष्ट रूप से आगे स्पष्टीकरण की आवश्यकता में एक परिभाषा। शायद क्रे एक्स 1 से अधिक परिचित कोई समझा सकता है।

1

मैंने स्टैक गार्ड के संदर्भ में "स्टैक थ्रैशिंग" शब्द सुना, लेकिन मुझे लगता है कि इसे अक्सर "स्टैक स्मैशिंग" कहा जाता है। स्टैक स्मैशिंग का मतलब है कि किसी भी तरह का शोषण ढेर कमजोरियों (जैसे buffer overflows)। यही कारण है कि जीसीसी स्टैक सुरक्षा को एसएसपी (Stack-Smashing Protector) कहा जाता है।

+1

"थ्रैश" <> "स्मैश" – talkaboutquality

0

मैंने "स्टैक को दूषित करने" के अर्थ में एक बार "स्टैक को कचरा" (पहले एच के बिना) सुना है, उदाहरण के लिए जब कोई फ़ंक्शन स्टैक्स से/से अधिक बाइट्स को/रखता है, तो स्टैक पॉइंटर को गड़बड़ कर देना और अन्य फ़ंक्शन के लिए इसे सही तरीके से काम करना असंभव बना देना चाहिए।

यह तब हो सकता है जब आप गलत कॉलिंग सम्मेलन के साथ बाहरी फ़ंक्शन को कॉल करते हैं (उदाहरण के लिए जब एक डीएल में कोई फ़ंक्शन stdcall होता है लेकिन आप इसे cdecl के रूप में घोषित करते हैं), या जब आप एक भिन्न कार्य को कॉल करते हैं जैसे printf या scanf गलत गुजर रहा है प्रारूप स्ट्रिंग, इसलिए यह जितना संभव हो उतना/कम बाइट पॉप करता है।

+0

"थ्रैश" <> "ट्रैश" – talkaboutquality

+0

मुझे पता है, लेकिन चूंकि मैंने कभी नहीं सुना है कि मैंने सोचा था कि शायद उसने इसे गलत समझा होगा । –

1

मुझे यकीन है कि यह शब्द पूरी तरह से बोलचाल है और इसका सटीक अर्थ नहीं है। क्या आपके पास एक विशिष्ट उद्धरण या लिंक है जहां आपने इसे देखा है?

किसी भी सटीक तकनीकी परिभाषा के बिना, मेरा सुझाव है कि इसका मतलब यह है कि शब्द का उपयोगकर्ता जो भी सोचता है उसका मतलब है। यह मुझे लगता है कि किसी भी प्रकार के दुर्व्यवहार या ढेर के अक्षम उपयोग पर लागू किया जा सकता है, लेकिन चूंकि आमतौर पर स्टैक मैनिपुलेशन में होता है, यह है कि स्टैक पॉइंटर ले जाया जाता है, यह परिभाषित करना मुश्किल होगा कि 'कचरा' बस सामान्य और वांछनीय व्यवहार।

एक बहु थ्रेडेड एप्लिकेशन में जहां प्रत्येक धागे का अपना ढेर होता है, संदर्भ स्विचिंग स्टैक्स की तेज़ी से स्विचिंग का संकेत देती है, लेकिन यह घटना पूरी तरह से और कम अस्पष्ट रूप से "टास्क-थ्रैशिंग" शब्द द्वारा वर्णित है।

संबंधित मुद्दे