15. ஡ c   ६ 믮
*****************************************

  ⢥砥  ,  易 DJGPP ।  
६ 믮.

15.1 쪮 㠫쭮   ?
=========================================

Q: 쪮 㠫쭮   ᯮ짮 ?

*A*:    DPMI ,   ᯮ. CWSDPMI (᢮
DPMI ,  室  DJGPP) ᪠  ᯮ짮  㯭
⠭  ⥫  ( 128M)   128M ᪮ ࠭⢠,
  饣 ⢠ 256M 㠫쭮   襣 ਫ.
஡ " malloc (50*1024*1024) ' .

 㣨 DPMI ࠬ,     . Quartdeck's DPMI ,
ਬ,  訡    ᨩ,  ⢨⥫쭮 ⪫砥
㠫   DJGPP (ᠭ  QDPMI VM 訡   15.3,
), ⠪   ⮫쪮 ,  ᢮ ⨢  㯭.
 Windows 3x, ⢮ 㠫쭮 ,   砥,  
ࠧ  ⠭ 㠫쭮    ࠢ   ⠭ ".
Pif ' 䠩  ணࠬ   믮 (. ⮭ ।
Windows   15.5, ).  Windows 9x, ⠭   ᢮⢠
ਫ DOS ।, ᪮쪮 㠫쭮 ,  ணࠬ DJGPP
(. ஡ ।   15.6, ).

15.2 ,  "malloc /free"    㠫  ...
==========================================================================

** Q*:   " malloc (50*1024*1024) ',   ,   ⠭
稫,   ⮫쪮  8  RAM   設.
   㠫쭠  ॠ쭮? *

** Q*:  "malloc" 让 ᮪ ,    ஢ 祭,
饭 "_go32_remaining_physical_memory"  " __
dpmi_get_memory_information ',      ...*

** Q*:   "᢮" ।  ,
"_go32_remaining_physical_memory"      
㯭  *

*A*: CWSDPMI (, , 㣨 DPMI ) ⮫쪮 ࠭  ,
   䠪᪨ . ᫨   ⮫쪮 "malloc", ⮣ 
䠪᪨  頥  ,   㤥 墠뢠  ࠭.
஡ "calloc",  㢨 *讥* ࠧ稥.

  뢠 "free", DJGPP ⥪  頥  ⥬, 
⮫쪮    ७  ᢮ ࠭. ,  窨 ७
⥬,  ࠭  "᢮".

15.3 祭 ⪠   襣 ⢠  祬 䨧᪨
⠭
=========================================================================

** Q*:   ஡   襬   祬 ᢮
 , "malloc" 頥 "NULL" 㪠⥫,   
஥ 筮 ᮮ饭  訡  ⮬:*

DPMI: Not enough memory (0x00860000 bytes)

*  ⮬:*

QDPMI: Memory Paging Violation: Illegal Page Reference [PTE=0000-0000h]
[CR2=8006-3000h at 00E7h:0000-4936h]

QDPMI: Unrecoverable Exception: 000Eh at 00E7h:0000-4936h.  Error Code = 0006h

*A*:  ⨯筮  DPMI  Quarterdeck, 뢠 QDPMI, 
室  QEMM386 ᨥ 7.53  ࠭.  ᨨ QDPMI (, 
室  QEMM v6. x)    ﭨ  ࠧ  ,
  ࠧ -  祬 㯭  ,   ⮬, 
㠫 ࢨ  ᪠; 㣨 ᨨ (,  室  QEMM
v7. x) ⮫쪮,  ᪠ ।  ⢮  祬,
䨧᪨ 㯥. ᫨  ᯮ짮 襥 ⢮  
祬,  䨧᪨ 㯥, ⪫  ⠭ QDPMI   12.2,
 ᯮ짮 CWSDPMI  .

 訡 뫠 ࠢ  QDPMI ᨨ 1.10  , ஭ 
QEMM, 稭  ᨥ 8.0, ⠪   ᫥ ᨨ QEMM  
⠪  襭.  QEMM 6. x, 㤮⮢,   ணࠬ  ⬥
  㬮砭 ⨯ "sbrk" ,  ⠭ "
_crt0_startup_flags'  " _CRT0_FLAG_UNIX_SBRK ' (QEMM 8.0   
। 㠫    ⨯ " sbrk ' ).

᫨  ᯮ  DPMI , 㤮⮢,  㠫쭠
 㯭. ਬ,  386Max,  " swapfile = ' ࠬ, ⮡
⠭ 㠫 ᢮ 䠩 ;     ﭭ
( ᪮ DJGPP )  樥 /p.

15.4 ᡮ ।    ᥩ 
======================================================

** Q*: ,    ணࠬ, ⮡   । 襥
⢮  祬 䨧᪨ 㯭,  ⮣ ⮡ ࠡ  ⮩
QDPMI VM 訡   15.3,   ணࠬ   砥 "NULL"
㪠⥫  "malloc/calloc"! *

** Q*: 祬  ணࠬ 㬨ࠥ  SIGSEGV  CWSDPMI  ।
᪠ ? *

*A*: 㣠 ᮡ QDPMI,  襫  QEMM । ᨥ 8.0: 
  㤥 ᪠ , । ᮪,   訬
祬,  祣 㯭.  Windows 3x  ᥡ ⠪  ࠧ, 
⤥  ᮮ騫,    ᠬ  ⨭  Windows 95.

 묨 DPMI ⠢騪,      맢 묨
ந⥫묨 ⠬  饭 "malloc":    
 㯭 ,  DJGPP ॠ "malloc"  ᢮
  ⥬ 㣫 ꥬ   祭 襭 
㬭  2 । 맮 "sbrk"; ⠪ ࠧ " malloc (8) ' 䠪᪨
 16MBytes  DPMI .   ᮬ, 맮 "sbrk"
।⢥, ᮡ, ᫨    ᢮   
祭 믮.

᫨  ணࠬ 訢   讬 ⢥  ᪮, 
  ਢ  ,   ᯮ CWSDPMI   DPMI
.  - , ⮬  CWSDPMI 믮  ⠡,  
᫥ । . ᫨  ᯮ  1 CWSDPMI, 
 㢥稢 ᨬ쭮 ࠭⢮, ஥ CWSDPMI ᯮ,
  CWSDPMI  ࠧ , ਬ ftp: //
ftp.neosoft.com/pub/users/s/sandmann/cs dpmi1heapfix.zip. 稭  ᪠ 2,
CWSDPMI ।  ( 6 )  㬮砭 ,      3
 40  ⮣, ⮡ ࠭᫨஢ CWSDPMI.    
᫥ CWSDPMI, ᫨  뢠 ⠪ ஡.

15.5 ।  ௨ 㤠  Windows
====================================================

** Q*:  믮   Windows 3   DOS,  DJGPP  ⭮⥫쭮
筮 DPMI ,  㠫쭠  ᪠ *

*A*:   㤮⮢,   ࠧ 襣 ᢮ 䠩 Windows
   ࠩ  2 ࠧ ,  祬 ᠬ  㠫쭠 
 ன  㦤. ஢,    筮 ᢮ ᪮
࠭⢮; ᫨  , 믮 defragger (Windows 㦤 
᢮ 䠩  뢭).  ࠧ 筮 ࠭稢 "
㠫 = 4 ࠧ  祬 䨧᪨ "  ࠢ,    
,  ⠢  ᮮ⢥ ப:

PageOverCommit=n

 " [386Enh] ' ࠧ 襣 "SYSTEM.INI" 䠩. ࠬ "n" = 4  㬮砭,
   ⠭, ⮡  ⠪ ࠧ,  20.

15.6 ᮡ ।   Windows 9x
=====================================================

** Q*:    ᯮᮡ   祬 16  㠫쭮  
Windows 95,   ⮬,    32 , ⠭   設, 
 ᪮ ࠭⢠ ...*

*A*:   ⠭ ᨬ쭮 ⢮ DPMI  65535 
᢮⢠ ਫ DOS. ᫨  ⠢  ⠭  "" 祭
 㬮砭,  ⮫쪮 砥 16 .   䠪᪨  65535
  , ⠪  ஢ઠ 祭  ᯨ᪠, ।
Windows      諮 16384 ( , 16).

 ,     ।  祬  㯭
   ᪥  Windows 9x, 筮 ⠪     Win3. x,   
   祬 64  㠫쭮   㯭 ணࠬ DJGPP,
믮饩  Windows.

15.7 ।  ௨ 㤠  EMM386  HIMEM
=============================================================

** Q*:  設  48 ,    ᪠ ணࠬ DJGPP, 
稭  ᫥ ⮣,  32  ᯮ짮 ...*

** Q*:   5  ᢮   設 ,  DJGPP ணࠬ 稭
, ⮫쪮 ᫥ 256KBytes  ᯮ짮?? *

*A*:     맢 묨 묨 ﬨ ᯥ ,
⠭   設 ( HIMEM  EMM386  ன ᨨ DOS),
 뫨 ࠭祭 32  (EMS) ७ . ஡
믮   (CWSDPMI,  ᯮ짮 ࠡ⠭ (XMS)
⥫ ),  騢 ᫨⥫    
ᨨ DOS.

᫨  ணࠬ 稭 , ᫥ ⮫쪮 256KBytes 
ᯮ짮,    ᯮ EMM386  CWSDPMI,   "
CONFIG.SYS'  ।  ꥬ ,   ⠭ EMM386.
EMM386 祭  㬮砭  256  ⮬ 砥;   ᮮ EMM386
, ᪮쪮    ਭ.   ᯮ짮 ணࠬ
`GO32-V2 ' ணࠬ  ⮣ ⮡ ᬮ  ⢮ ७
   ᯮ짮.

15.8 C쪮  ⡨ࠥ  ணࠬ DJGPP த⥫  ᪠
୨ ?
====================================================================

** Q*: 쪮  㯭,   뢠  㭪 "system"?
*

*A*:  ⠭⭮ ( ⪨ 640) ,  㯭 ,  뫮
᢮ । ᪮ 襩 ணࠬ,  ᪫祭  ᯮ DPMI
஬. ⢮ ⠭⭮ , ॡ㥬 DPMI ஬  
⥯ ᯮ짮  .  ࢮ ணࠬ DJGPP, QDPMI
ᯮ  97, CWSDPMI ᯮ ⭮⥫쭮 70, Windows 3x ⮫쪮
18 .  ᯮ⥫쭮 饭  "system" (  ४ᨢ
맮 "make") ࠥ  18 (16   ।  2  PSP 
㦥 )  設⢠ DPMI ࢥ஢; ⭮ ᪫祭 - QDPMI,
 㦤   97    ᫥ 맮 ⠪.
᫨   ࠧ  । ( "STUBEDIT"), ⢮ ᢮
⠭⭮ RAM  ᮮ⢥⢥.

 (XMS) ⥫쭮  ⠢ DPMI ࢥ஬; DJGPP  
祣 ᯥ樠쭮 ⭮⥫쭮 XMS,  "system" 뢠.  砥
  (XMS) ⥫쭠 , ᯮ㥬 த⥫᪮ ணࠬ -
** ᢮,   ணࠬ ; ᫨ ୨ 
ॡ 襣 ⢠  祬  䨧᪨ ᢮, DPMI
ࢥ,  ࠭  த⥫. (  ⫨稥  DJGPP v1. x,  "go32"
⥫    ࠭ ᭠㦨 த⥫ । ⮬
୥.) २⢮ ⮣ 室  ⮬,  ஦ ୥ 
   ᭠㦨   ॥  v2 祬  v1. x, 
᪫祭  設   ⢠ ⠭  .
⮪ , , ᫨  ஦ ணࠬ ॠ쭮 ०, 
ᯮ XMS, XMS ᯮ짮 襩 ணࠬ DJGPP 㤥 㯭 
, ᫨   ᯮ ᯥ  ( ⨢ ⮬, 
CWSDPMI ᯮ ।⢥ XMS  HIMEM). ⢥ ᯮᮡ 
 ஡ ⮨  ⮬, ⮡ 㯠 襥 ⢮ 
,  ⠭ ॠ쭮 ᯥ .

  , ᫨  ᯮ ᯥ  ⨯ EMM386 
QEMM386  ࠬ஬ NOEMS, CWSDPMI ᯮ XMS ( ⨢ VCPI)
㣨, ⮡ । (XMS) ⥫ ,  । 
㯭 XMS   ᥡ.  ᫨,   ६   ணࠬ DJGPP
믮, ஥ १⭮ ணࠬ ᯥ祭 ⨯ ࠩ
ன⢠  TSR ஡ । XMS, । 㤥 ௥
㤠.

15.9 쪮 ⥪     ணࠬ DJGPP?
====================================================

** Q*:  ணࠬ    ᯮ 祭 訥 ⮬᪨
ᨢ. *

** Q*: 쪮 ࠭⢮ ⥪      ணࠬ? *

** Q*:  ணࠬ   ९ ⥪,  ⮫쪮,   믮 
 ⫠稪 ...*

** Q*:  ணࠬ ᡮ  SIGSEGV,  ⫠ 窨   ᫠: 
窨  뢠 ___ djgpp_exception_table ...,   ஡ ⫠,
  筮      㭪, 
getc ().   ᠬ ணࠬ ࠡ⠥ 筮    DJGPP
v1. x,  ந室?? *

*A* ணࠬ DJGPP v2  ⥪ 䨪஢ ࠧ, 
।  ᪠ (startup)  ⥬ ⠥ 䨪஢  祭
ᥣ ப ࠡ ணࠬ;  訡 / ⥫ DPMI 0.9 ᯥ䨪樨. 
㬮砭,   256KB ⥪,   ணࠬ,  ᯮ
訥 ⮬᪨ ᨢ,  㡮 ४ᨢ,   㦤
. ᫨   㬮砭 ࠧ ⥪  祭,  
  ணࠬ STUBEDIT ( ࠬ " 쭮 ⢮
࠭⢠ ⥪ "),   ⠭ 쭮 ६ "_stklen" 
襩 ணࠬ. ਬ:

unsigned _stklen = 1048576;  /* need a 1MB stack */

  ᪠ DJGPP ஢ 祭  誥  祭 "_stklen", 
ᯮ 訥   . ⥫쭮, ணࠬ,   ⥭
ࠧ ⥪,  ⠭ "_stklen", ⮡ 㤮⮢,   
ᥣ ࠡ,  ᫨  -  ।   誨  
 祭.  ⮤ ⠪  ,    ⫠
 ணࠬ  "gdb" (. ). ,   㦤 ⮡
ᯮ짮 "STUBEDIT"  ணࠬ,      室.

ணࠬ,  㦤  筮 讬 ⥪,   ࠧ 
묨 ᫥ ⥪, ⮬    ⠭ ᠭ 
९騬 ⥪. ⮡ ,   稭 ⠪ ᡮ,
믮 "STUBEDIT"  襩 ணࠬ   訬 ࠧ஬ ⥪ (
4MBytes). ᫨  ᮧ ஡, 室, ࠨ ࠭祭 ⥪ 
, 業  ணࠬ,      ⨬, ⮣
⠭ "_stklen"  ᮮ⢥饬 祭  ᭥  
࠭᫨ ணࠬ. ( DPMI  䠪᪨ ।
 ⥪,  ᫨    ⮣ ᯮ, ⠪ ⠢ ⮣ 
譥 讬 祭 稭 । ணࠬ  設  .)

 짮⥫ ᮮ騫,   㦤, ⮡ 㢥 ࠧ
⥪  C++, " cc1plus. exe ', ।   ਨ 
஢  १砩 訥  ᫮ ணࠬ C++. 㣠
ணࠬ  ,  ᮮ頫,  㦤  ⥪  祬 祭 
㬮砭 - "bccbgi.exe"  "BCC2GRX" .

᫥ ⮣,   ᯮ짮 "STUBEDIT" ⮡  ࠧ ⥪,
믮  ᭮, ⮡ 㤮⮢,   ⮡ࠦ  祭 
㬮砭 祭,  㬠,   .  ⮬  "STUBEDIT" 㤥
  ⠭ ࠧ ⥪  0 ( ⥬    
㬮砭 ⥪ 256) ᫨   室  祭,  ⠥
(ਬ, ᫨   ࠢ ᨭ⠪).

  믮 ணࠬ   誨 COFF ⮡ࠦ  ⫠稪,
ࠧ ⥪   ⫠稪. , ᫨  ணࠬ 㦤  讬
⥪   믮   "gdb", 㡥  stubedit "gdb",  㢥稫
⥪   ࠩ  祭,  ணࠬ  믮 ᭮.

 Windows, 㡥,   । 筮 让 ᢮ 䠩
(᪠ 40MBytes)   ࠢ  㤮⮢ ". PIF ' 䠩  襩
ணࠬ   ᫨誮  ࠭祭 EMS/XMS ᯮ짮 (
   -1).   ⨬?    ". PIF ' 䠩  ⮩
ணࠬ? ⥬ Windows ᯮ   㬮砭 䠩 "DOSPRMPT.PIF",
  ᮬ । 祭  ࠭祭  ,  襩
ணࠬ,    ஡  祭 ,  ॡ  ⥪.

DJGPP v2. 0  ⮭ 訡   ᪠,  祭 祭 ।, 
   ணࠬ, 饩   Page Fault  SIGSEGV. ᫨ 
ᯮ v2. 0   ⥪,  CWSDPMI ࠧ   , ஡
  (ਬ, 4) ᪨   襩 ணࠬ, 
.,   .  ᠬ 訩 ᯮᮡ ८  ⮨  ⮬,
⮡  ᫨⥫  DJGPP v2. 01  .

brk
===

⠪
-----

#include <stdlib.h>

int brk(void *ptr);

ᠭ
----------

 㭪  * 뢠(break) *  ணࠬ.  -  ,
, ᫨ 맢, ⠢ ࠢ ந室. ணࠬ  
襬 ⢥ ,  । 訥 祭  PTR. 筮, 
믮 祢 १ 㭪 malloc.

頥 祭
-----------

, ᫨ 뢠 뫮 , -1 ᫨ . ERRNO ⠭  訡.

ਬ
------

if (brk(old_brk+1000)) printf("no memory\n");

sbrk
====

Syntax
-----

#include <unistd.h>

void *sbrk(int delta)

Description
----------

 㭪  "뢠(break)" ணࠬ,     ⮬.
 - ᠬ ᮪ ,   ணࠬ    ⮣, ⮡
맢 襭.    -   뢠,   
 ( "malloc" 砥  ) 㢥稢 뢠.

 ⮩ 㭪樨 筮  ⮫쪮  "malloc" (malloc.).

頥 祭
-----------

 ࢮ   ।饣 ⨬ ᭮ ࢠ,  -1,
᫨     뫮  . 㣨 ᫮, 㪠⥫ 
᮪ ,   ⮫쪮 ।, ᫨  । ⥫
.

:

1.  㯭 䨧᪮  㠫쭮  
     DPMI.
2. malloc  頥  ࠭栬  뤥, ⮬
     ।     墠. alloc -
   .
3. free -  ⤠  ⥬,  ࠭  DJGPP.
4.   뤥 ᠬ 让 ᮪  ࠢ
    㯭 .
5.  ,    1 DJ  2  ஫
    break.
6.  ᯮ짮 쪨 ᪮   㯨 ,
   ⠪    DPMI  䨪஢ ࠧ
   ⠡  ࠭ । ᪮ .
7.  ᯮ  ᨨ ஢ DPMI.

뢮:

1.   ᪮  ᯮ ᢮  .
2.   뤥 ࠧ 祭 让 ᮪ .
3.   ।  墠 室 
      । ,  ᪫祭 砥
   饭  ⥬ ( 䠩 , , ७
    malloc ).
