מהי הקצאה דינאמית?

avitano

New member
מהי הקצאה דינאמית?

מישהו רשם לי: בסביבת עבודה של DOS ב real mode כפי שאתה עובד לא ניתן להקצות בבלוק אחד יותר מ64K אבל בעזרת מספר הקצאות דינאמיות בפרוש ניתן להגיע ליותר מ64K זכרון.
 

codec

New member
הקצאה דינמית

הכוונה היא לבקש ממערכת ההפעלה (או, במקרה שלך, DOS - לא בדיוק "מערכת") בלוק זיכרון בזמן ריצת התוכנית, לאחסן בו נתונים, ואח"כ לשחרר אותו. המגבלה ב-DOS היא, שכל בלוק כזה יכול להיות עד גודל של 64K.
 

DarkSwell

New member
DOS לא בדיוק "מערכת"...?

DOS היא בדיוק, אבל בדיוק ובמלוא מובן הכוונה מערכת הפעלה! לגבי ההקצאה הסבר נכון, רק שניתן גם יותר מ 64K. המקום שמוקצה עבור כל סיגמנט הנתונים הוא 64K ב Model Small. כך שאם אתה מפתח ב Model Small המקום שישאר עבור הקצעה דינמית הוא 64K מינוס כמות הזיכרון שתופס סיגמנט הנתונים. כמובן שניתן לכתוב תוכניות עם סיגמנט נתונים יותר גדול ותתפלא עד כמה!
 

vinney

Well-known member
הוא צודק

תוכניות 16 ביט בreal mode לא יכולות לעבוד על יותר מסגמנט אחד בו זמנית, זה פשוט גודל מקסימלי למצביע. ה"דוס" של חלונות 2000/XP הוא באמת לא בדיוק דוס, אלא מדמה של דוס, שרץ במצב מוגן, לכן אתה יכול להריץ שם אפליקציות 32 ביט. כדי להריץ אפליקצית 32 ביט בדוס רגיל (עד דוס 6.2), צריך דרייבר נוסף - או EMM , או DPMI או RTM או עוד כהנה וכהנה שמדמים מצב 32 ביט.
 

avitano

New member
אז איך אני מקצה עוד בלוק זיכרון??

אני עובד עם טורבו סי לא בורלנד איך אני מקצה עוד בלוק?
 

codec

New member
שכחתי לענות גם לך...

ב-DOS: פונקציה 48h ב-INTERRUPT מספר 21h או במילים:
mov ah,0x48 mov bx,size int 0x21 jnc _done _error: ... _done:​
ביציאה, הרגיסטר AX יחזיק את כתובת הסגמנט החדש שלך, או את קוד השגיאה.
 

codec

New member
טוב, התפרעתי...מצטער...

אני אישית מאוד בעד DOS (שלא מפריעה לקוד שלי לעשות מה שאני רוצה בזמן שהוא רץ). משום מה זה תמיד חוזר על עצמו בכל סמסטר, בשעור הראשון של הקורס במערכת הפעלה. מישהו יגיד "DOS" והמרצה יתחיל ב"הרצאה"...
 
למעלה