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