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
|
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void* allocation;
int main() {
const int MB = 1024 * 1024;
const int CHUNK = 512 * MB;
long num_allocations;
for (num_allocations = 0;; num_allocations++) {
allocation = malloc(CHUNK);
if (!allocation) {
puts("failed to allocate any more");
break;
}
printf("%ld: Allocated %d MB, total so far: %ld MB\n",
num_allocations, CHUNK / MB,
(num_allocations * CHUNK) / MB);
printf(" (writing to make sure, to %p)\n", allocation);
memset(allocation, 42, CHUNK);
}
// We should have allocated at least 2GB.
assert(num_allocations >= 4);
// We should have allocated less than 4GB (we can't get to exactly 4GB
// since we started with some small amount, and then add 512MB chunks).
assert(num_allocations < 8);
puts("success");
}
|