-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbad_allocator.cpp
More file actions
executable file
·90 lines (75 loc) · 1.47 KB
/
bad_allocator.cpp
File metadata and controls
executable file
·90 lines (75 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include<iostream>
#include<cstdlib>
#include "allocator_interface.h"
#include "memlib.h"
#define BAD_SIZE 4101
namespace my
{
/*
* bad_init - Does nothing.
*/
int bad_allocator::init()
{
return 0;
}
/*
* bad_check - No checker.
*/
int bad_allocator::check()
{
return 1;
}
/*
* bad_malloc - Allocate a block by incrementing the brk pointer.
* Always allocate a block whose size is not a multiple of the alignment,
* and may not fit the requested allocation size.
*/
void * bad_allocator::malloc(size_t size)
{
size = BAD_SIZE; /* Overrides input, and has bad aligmnent. */
void *p = mem_sbrk(size);
if (p == (void *)-1) {
/* The heap is probably full, so return NULL. */
return NULL;
} else {
return p;
}
}
/*
* bad_free - Freeing a block does nothing.
*/
void bad_allocator::free(void *ptr)
{
}
/*
* bad_realloc - Implemented simply in terms of bad_malloc and bad_free, but lacks
* copy step.
*/
void * bad_allocator::realloc(void *ptr, size_t size)
{
void *newptr;
/* Allocate a new chunk of memory, and fail if that allocation fails. */
newptr = malloc(size);
if (NULL == newptr)
return NULL;
/* Release the old block. */
free(ptr);
/* Return a pointer to the new block. */
return newptr;
}
/* call mem_reset_brk. */
void bad_allocator::reset_brk()
{
mem_reset_brk() ;
}
/* call mem_heap_lo */
void * bad_allocator::heap_lo()
{
return mem_heap_lo() ;
}
/* call mem_heap_hi */
void * bad_allocator::heap_hi()
{
return mem_heap_hi() ;
}
};