ההבדל העקרי הוא הייצוג של המשתנה שלך בזכרון.
משתנה מספרי מיוצג כמספר בינארי של 32\64 ביטים (תלוי בפלטפורמה) והגודל הזה קבוע לכל אורך התוכנית שלך.
המספרים מיוצגים בזכרון בצורה כזו שנוח לבצע עליהם פעולות אלגבריות.
יתרה מזאת,
רק על מספרים המחשב
יודע בכלל לעשות פעולות אלגבריות.
מחרוזת לעומת זאת, מיוצגת בזכרון כ
מערך של תווים, כשכל תו הוא בגודל של 8 ביט ומחזיק את ערך ה-ASCII שלו.
בנוסף, כל מחרוזת מסתיימת בתו מיוחד כדי שפונק' ההדפסה ידעו מתי היא מסתיימת, ולכן גם מחרוזת ריקה תופסת 8 ביט.
אם למשל תכתוב
המשנה שלך יתפוס 64 ביטים(כשמספר כזה יתפוס ככל הנראה 32), אבל חוץ מזה, לא תוכל לבצע עליו פעולות אלגבריות.
למרות שהקוד שלך עצמו תופס רק 3 שורות, המחשב מתרגם אותו שונה למדי:
על כל משתנה מספר-מחרוזת שלך מופעלת פונק' הממירה את המחרוזת למספר, ורק א"כ מבוצעת הפעולה האלגברית שלך - בזבוז שווא של משאבי מערכת!
על המשתנה a שלי, לדוגמא, הפונק' הנ"ל תזדקק ל-7 איטרציות, כאשר בכל איטרציה היא תצטרך להמיר את ערך ה-ASCII לערך מספרי (פעולת חיסור), להשתמש במשתנה סכימה (בזבוז זכרון), הכפלה של משתנה הסכימה פי 10 (פעולת כפל) וחיבור הערך למשתנה הסכימה (פעולת חיבור).
אתה מאלץ את השרת לעבוד הרבה הרבה הרבה הרבה הרבה יותר קשה בשביל אותה הפעולה.
עכשיו תחשוב מה קורה אם אתה בונה ככה מערכת שמשרתת חצי מליון איש ביום...
לא חבל לבזבז הון על שרת חזק רק כי אתה לא יודע לתכנת?