https://github.com/Unipisa/CMM
Tip revision: bf76b38a16a1c7c2b9b54c40b3d6e1471fe79c7b authored by Giuseppe Attardi on 02 November 1995, 15:11:11 UTC
1.5 -
1.5 -
Tip revision: bf76b38
test3.cc
/* This program is used to test the ability of gcalloc to recover from heap
allocation failures. It is run:
expand [<initial heap> [<max heap> [<increment>]]]
where all values are optional and expressed in megabytes.
*/
#include <string.h>
#include <stream.h>
#include <ctype.h>
#include "cmm.cc"
#define MB 1048576
/* The basic data structure is a list of blocks. */
struct block : CmmObject {
block* prev;
int number[25000];
block(block* ptr, int x);
void traverse();
};
void block::traverse()
{
Cmm::heap->scavenge((CmmObject **)&prev);
}
block::block(block* ptr, int x)
{
prev = ptr;
for (int i = 0 ; i < 25000 ; i++) number[i] = x;
}
void makeheap(int initial, int final, int inc)
{
Cmm heap(initial*MB, final*MB, inc*MB, 0, 1, CMM_STATS);
}
main(int argc, char* argv[])
{
block *lp = NULL;
int i;
makeheap((argc == 1) ? 1 : atoi(argv[1]),
(argc < 3) ? 1000 : atoi(argv[2]),
(argc < 4) ? 2 : atoi(argv[3]));
for (i = 0 ; expandfailed != 1 && i < 20; i++) {
lp = new block(lp, i);
Cmm::heap->collect();
}
lp = new block(lp, i);
Cmm::heap->collect();
lp = new block(lp, i+1);
Cmm::heap->collect();
i = 0;
while (lp != NULL) {
cout << lp->number[0] << " " << lp->number[24999] << " ";
lp = lp->prev;
if (++i % 10 == 0) cout << "\n";
}
cout << "\n";
exit(0);
}