INF: Possible Cause for Slow Stream I/O

ID Number: Q46741

5.10 6.00 6.00a 6.00ax 7.00

MS-DOS

Summary:

In Microsoft C versions 5.0, 5.1, 6.0, 6.0a, 6.0ax, and C/C++ version

7.0, the stream level I/O routines inherit their speed and flexibility

from the buffering system they use. Upon opening a file with the

fopen() function, a file record is created that contains pointers into

a stream buffer. This buffer is then allocated (malloc-ed) when the

first I/O operation is performed. If there is not enough room in the

heap for this buffer allocation, the file operation continues with a

buffer size of one character.

A stream I/O routine that takes an excessive amount of time is

probably the result of a failure to allocate the 512-byte buffer on

the heap (near or far, depending on the memory model). Without this

buffer, the I/O routines are extremely slow, requiring disk access for

all I/O operations.

To work around this problem, do one of two things.

- Reduce the amount of allocation on the heap.

-or-

- Change memory models to compact or large (if you are in small or

medium). If you change memory models, you may need to use the /Gt

switch to push static data out of DGROUP.

Additional reference words: 5.10 6.00 6.00a 6.00ax 7.00