#include <iostream>
#include <stdio.h>
#include <stddef.h>
#include <unistd.h>
#include <sys/mman.h>
#include <vector>
void* malloc(size_t size) {
write(STDOUT_FILENO, "malloc... ", 10);
size += sizeof(size_t);
int page_size = getpagesize();
int rem = size % page_size;
if (rem > 0) {
size += page_size - rem;
}
void* addr = mmap(0, size, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (addr == MAP_FAILED) {
write(STDOUT_FILENO, "fail\n", 5);
return NULL;
}
write(STDOUT_FILENO, "ok\n", 3);
*(size_t*)addr = size;
return (size_t*)addr + 1;
}
void free (void *ptr) {
write(STDOUT_FILENO, "free... ", 8);
size_t* real_ptr = (size_t*)ptr - 1;
if (!munmap(real_ptr, *real_ptr)) {
write(STDOUT_FILENO, "ok\n", 3);
} else {
write(STDOUT_FILENO, "fail\n", 5);
}
}
int main() {
std::vector<int> a;
a.push_back(42);
a.push_back(56);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8dmVjdG9yPgoKdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CiAgd3JpdGUoU1RET1VUX0ZJTEVOTywgIm1hbGxvYy4uLiAiLCAxMCk7CiAgc2l6ZSArPSBzaXplb2Yoc2l6ZV90KTsKICBpbnQgcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKICBpbnQgcmVtID0gc2l6ZSAlIHBhZ2Vfc2l6ZTsKICBpZiAocmVtID4gMCkgewogICAgc2l6ZSArPSBwYWdlX3NpemUgLSByZW07CiAgfQogIHZvaWQqIGFkZHIgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiAgICAgICAgICAgICAgICAgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CiAgaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewogICAgd3JpdGUoU1RET1VUX0ZJTEVOTywgImZhaWxcbiIsIDUpOwogICAgcmV0dXJuIE5VTEw7CiAgfQogIHdyaXRlKFNURE9VVF9GSUxFTk8sICJva1xuIiwgMyk7CiAgKihzaXplX3QqKWFkZHIgPSBzaXplOwogIHJldHVybiAoc2l6ZV90KilhZGRyICsgMTsKfQoKdm9pZCBmcmVlICh2b2lkICpwdHIpIHsKICB3cml0ZShTVERPVVRfRklMRU5PLCAiZnJlZS4uLiAiLCA4KTsKICBzaXplX3QqIHJlYWxfcHRyID0gKHNpemVfdCopcHRyIC0gMTsKICBpZiAoIW11bm1hcChyZWFsX3B0ciwgKnJlYWxfcHRyKSkgewogICAgd3JpdGUoU1RET1VUX0ZJTEVOTywgIm9rXG4iLCAzKTsKICB9IGVsc2UgewogICAgd3JpdGUoU1RET1VUX0ZJTEVOTywgImZhaWxcbiIsIDUpOwogIH0KfQoKCmludCBtYWluKCkgewoJc3RkOjp2ZWN0b3I8aW50PiBhOwoJYS5wdXNoX2JhY2soNDIpOwoJYS5wdXNoX2JhY2soNTYpOwoJCglyZXR1cm4gMDsKfQ==