www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/12/03/19:05:22

Date: Wed, 04 Dec 1996 12:55:41 +0000
From: Bill Currie <billc AT blackmagic DOT tait DOT co DOT nz>
Subject: Re: Minor problem with operator new[]
To: edkiser AT jaxnet DOT com
Cc: djgpp AT delorie DOT com
Reply-to: billc AT blackmagic DOT tait DOT co DOT nz
Message-id: <32A574CD.68F8@blackmagic.tait.co.nz>
Organization: Tait Electronics NZ
MIME-version: 1.0
References: <5800sc$5jp AT ns2 DOT southeast DOT net>

M. Edward Kiser wrote:
> 
> /*
> Recently, just out of curiosity, I decided to see how much memory I
> could allocate under various conditions. I wrote this program to find
> out, based on the assumption that operator new[] would throw an
> exception if it couldn't allocate the memory. But it doesn't throw the
> exception. It prints a message
> 
> "Virtual memory exceeded in new"
> 
> and terminates the program. This is very un-ANSI-like!
> 
> I searched the DJGPP FAQ (v2.01) and the djgpp\info\gcc.* files and
> couldn't find any hints on how to change this "bad" behavior. So...
> here I am.
> 
> 
> /*
> Typical output (Windows 95, with 20 MB of physical RAM):
> Trying to allocate 2 bytes... succeeded.
> Trying to allocate 4 bytes... succeeded.
> Trying to allocate 16777216 bytes... succeeded.
> Trying to allocate 33554432 bytes... Virtual memory exceeded in `new'
> */

Double all the above values, and that is the amount of memory you ar
realy allocating (with a minimum of 8 bytes, but an 8 byte chunk goes to
16 bytes)

This is due to the way malloc (which is called by new) works.  malloc
adds 4 (usually, but can be 8 if malloc.c is compiled for debugging) to
the requested size and then rounds the result up to the next power of
2.  

This behaviour is an optimization for speed rather than memory use.

Workaroun: define your own `operator new' for each object and manage
pools of memory yourself.

Bill
-- 
Leave others their otherness.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019