क्लैमाव क्लासिक स्ट्रिंग (बॉयर मूर) और नियमित अभिव्यक्ति (अहो कोरसिक) एल्गोरिदम का उपयोग करके खोज स्ट्रिंग रखता है। 1970 के दशक से एल्गोरिदम होने के नाते वे अत्यधिक स्मृति कुशल हैं।
समस्या वायरस हस्ताक्षर की बड़ी संख्या है। इससे एल्गोरिदम के डेटास्ट्रक्चर काफी बड़े हो रहे हैं।
आप उन डेटास्ट्रक्टर्स को स्वैप करने के लिए नहीं भेज सकते हैं, क्योंकि एल्गोरिदम के डेटास्ट्रक्चर के कुछ हिस्सों को अन्य भागों की तुलना में कम बार एक्सेस नहीं किया जाता है। यदि आप डिस्क को स्वैप करने के लिए उनमें से पृष्ठों को बाध्य करते हैं, तो वे बाद में क्षणों को संदर्भित करेंगे और बस सीधे वापस स्वैप करेंगे (तकनीकी रूप से हम कहते हैं "डेटास्ट्रक्चर की यादृच्छिक पहुंच पूरे डेटास्ट्रेक्चर को मेमोरी के कार्यशील सेट में होने के लिए मजबूर करती है। "।)
यदि आप कमांड लाइन से स्कैन कर रहे हैं या डेमॉन से स्कैन कर रहे हैं, तो डेटास्ट्रक्चर की आवश्यकता है।
आप वायरस हस्ताक्षरों के सिर्फ एक हिस्से का उपयोग नहीं कर सकते, क्योंकि आपको यह चुनने के लिए नहीं मिलता है कि आपको कौन से वायरस भेजे जाएंगे, और इस तरह से यह नहीं बताया जा सकता है कि आपको किन हस्ताक्षरों की आवश्यकता होगी।
यहाँ एक 32-बिट मशीन पर इस्तेमाल की गई मेमोरी है जो डेबियन व्हीज़ी चल रही है और यह क्लैम्ड है।
# ps_mem.py
Private + Shared = RAM used Program
281.7 MiB + 422.5 KiB = 282.1 MiB clamd
संपादित करें: मैं देखता हूं कि कोई व्यक्ति निवासी सेट आकार निर्धारित करने का सुझाव देता है। यदि यह सफल होता है, तो काम करने वाले सेट के आकार से कम निवासी के आकार का होने से स्वैप करने और बाहर निकलने की प्रक्रिया को बढ़ावा मिलेगा। यह पूरे सिस्टम के प्रदर्शन को काफी कम कर देगा। किसी भी स्थिति में सेटरलिमिट (RLIMIT_RSS, ...) के लिए लिनक्स मैनुअल पेज कहता है कि रेजिडेंट सेट साइज को सेट करना अब समर्थित नहीं है और कभी भी उन प्रक्रियाओं पर कोई प्रभाव नहीं पड़ा है, जिन्होंने मैडवाइज (MADV_WILLEDED ...) को नहीं चुना।