tyler569 icon

Custom allocator working on libc++ only

tyler569 | PRO | 08/17/18 02:08:21 PM UTC | 0 ⭐ | 1084 👁️ | Never ⏰ | []
C++ |

1.32 KB

|

None

|

0 👍

/

0 👎

 
#include <cstdlib>
#include <cstdio>
#include <memory>
#include <vector>
 
using std::vector;
using std::size_t;
 
template <typename T>
struct mallocator : std::allocator<T> {
    using value_type = T;
 
    T *allocate(size_t cnt) {
        std::printf("custom allocate called!\n");
        return static_cast<T *>(std::malloc(cnt * sizeof(T)));
    }
    void deallocate(T *mem) {
        return std::free(mem);
    }
    void deallocate(T *mem, size_t) {
        return std::free(mem);
    }
};
 
int main() {
    vector<int, mallocator<int>> foo = {1, 2, 3, 4, 5};
 
    for (int i=0; i<10; i++) {
        foo.push_back(8);
    }
}
 
 
///////////////////////////////////////
 
$ g++ --version
g++ (GCC) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
$ g++ -std=c++17 minimal_example.cc
$ ./a.out
$
$ clang++ --version
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
 
$ clang++ -std=c++17 minimal_example.cc
$ ./a.out
$
$
$ clang++ -std=c++17 -stdlib=libc++ minimal_example.cc
$ ./a.out
custom allocate called!
custom allocate called!
custom allocate called!
$

Comments