כשהלחמה ידנית הופכת לחלק משמעותי מספיק בפרויקט, צריך להתחיל לשים לב ליעילות ולמהירות שלה. כמה זמן באמת נדרש לכל סוג רכיב? האם סדר העבודה משנה? האם יש צווארי בקבוק? ביצעתי מספר מדידות בסיסיות כדי לקבל נתוני אמת שימושיים, והנה התוצאות.

כשהלחמה ידנית הופכת לחלק משמעותי מספיק בפרויקט, צריך להתחיל לשים לב ליעילות ולמהירות שלה. כמה זמן באמת נדרש לכל סוג רכיב? האם סדר העבודה משנה? האם יש צווארי בקבוק? ביצעתי מספר מדידות בסיסיות כדי לקבל נתוני אמת שימושיים, והנה התוצאות.
לפני כמה ימים קיבלתי מייל עם קישור לפנינה קטנה, תרתי משמע: משחק "סנייק" שנכתב באסמבלי (x86), ושגודלו – בינארי, לא כטקסט קריא – שישים בייטים בלבד. בואו ננסה להבין איך זה יכול להיות.
שאלה עם פתרון רקורסיבי טריוויאלי, לכאורה, הופכת לפחות-טריוויאלית כשכופים על הפתרון גם מגבלת זמן, ומהווה דוגמה מצוינת לעיקרון של תכנות דינמי.
להמשיך לקרוא חידות תכנות 3: נתיב במשולש מספריםנתון מערך של מספרים חיוביים, האם ניתן לחלק אותו לשני מערכים בעלי סכום זהה? בואו נפתור ביחד חידה פשוטה לכאורה, שהגיעה (לכאורה) מראיון קבלה למתכנתים בגוגל.
להמשיך לקרוא חידות תכנות 2: חלק מהמערך, חצי מהסכוםבאחד הסרטונים הישנים שלו, מהתקופה שבה הוא קישקש פחות והיה מעניין יותר, דייב ג'ונס אמר משפט חכם לגבי אופטימיזציה של זיכרון במיקרו-בקרים: אנחנו לא בשנות השמונים, אם הגעת למצב שאתה צריך לחשוב על כל בייט, כנראה בחרת במיקרו-בקר לא מתאים. זה נכון, ולכן הפוסט הזה, שעוסק תכל'ס בחיסכון של בייטים בודדים ממש, הוא לא עצה מעשית שמומלץ ליישם אלא פשוט תרגיל מחשבתי, איך לערער קצת על מוסמכות ולא לקחת שום דבר כמובן מאליו.
להמשיך לקרוא סיפורי אופטימיזציה: ניהול באפר במינימום זיכרוןלפני כחודש הראיתי מדוע, כאשר המהירות חשובה, זה לא רעיון טוב להשתמש במערך של struct בקוד שמיועד למיקרו-בקר שאינו מסוגל לבצע פעולת כפל בחומרה (איזה משפט, אה? 🙂 ) בפוסט זה אראה איך לשמר, פחות או יותר, את הנוחות של struct בלי להתפשר על המהירות, גם ברכיבים מוגבלים כאלה – ואת הסכנות שאורבות לנו בדרך. יש גם דוגמת קוד בסוף.
להמשיך לקרוא גישה מהירה ל-Struct, בלי כפלכשמיקרו-בקר פשוט צריך לחזור על פעולה מסוימת הרבה ומהר, עיכובים יכולים לצוץ מכל מיני מקומות מאוד לא צפויים. הנה סיפור קצר על המחיר הפחות-מוכר של מבנה הנתונים השני הכי פשוט בשפת C.
בעיית תכנות קלאסית בתחום הגרפיקה, שפתרונה מסתמך בדרך כלל על רקורסיה או מחסנית (Stack), מקבלת טוויסט מעניין כשצריך לממש אותה על מיקרו-בקר עם מגבלות זיכרון חריפות.
כשלא מצליחים לפתור חידה, אפשר לנסות להתנחם ברעיון שאולי אין לה בכלל פתרון. אבל מה עושים כשמוצאים את הפתרון, ועדיין לא מבינים אותו? קחו נשימה עמוקה, הכינו את האינטואיציה המתמטית ו/או את כישורי התכנות, ונראה אם תצליחו איפה שאני נכשלתי!
להמשיך לקרוא חידת מטבעות (ותכנות) למתקדמיםקטעים נבחרים מתוך המאבק העיקש שלי נגד חומרה חלשה ונגד קומפיילר עצלן, במטרה לקצר את זמן התגובה של המערכת שבניתי בפוסט הקודם.