| #include <stdlib.h> |
| #include <unistd.h> |
| |
| int main(int argc, char *argv[]) { |
| unsigned long i, block_cnt = 100; |
| char** blocks; |
| long page_size; |
| |
| page_size = sysconf(_SC_PAGESIZE); |
| if (page_size == -1) { |
| page_size = (1 << 12); // 4Kb |
| } |
| |
| if (argc > 1) { |
| block_cnt = strtoul(argv[1], NULL, 10); |
| if (block_cnt < 1) { |
| block_cnt = 1; |
| } |
| } |
| |
| blocks = (char**) malloc(block_cnt * sizeof(char*)); |
| for (i = 0; i < block_cnt; i++) { |
| char* dummy_ptr = (char*) malloc(page_size * sizeof(char)); // forcing fragmentation |
| blocks[i] = (char*) malloc(page_size * sizeof(char)); |
| free(dummy_ptr); |
| } |
| |
| for (i = 0; i < block_cnt; i++) { |
| char dummy_char = blocks[i][0]; |
| } |
| |
| for(i = 0; i < block_cnt; i++) { |
| free(blocks[i]); |
| } |
| |
| free(blocks); |
| |
| return 0; |
| } |