struct MemoryBlock { char data[32]; };
const int kBlockCount = 1024;
e = heap.
Init(
sizeof(MemoryBlock), 32, kBlockCount);
SUCCEED_IF(e == 0);
e = stack.
Init(kBlockCount);
SUCCEED_IF(e == 0);
const int kNumThread = 16;
std::thread th_list[kNumThread];
for (auto& th : th_list) {
th = std::thread([&]() {
for (int i = 0; i < kBlockCount / kNumThread; ++i) {
auto holder = heap.
Alloc();
stack.
Push(reinterpret_cast<uintptr_t>(holder));
}
});
}
for (auto& th : th_list) { th.join(); }
uintptr_t vec[kBlockCount];
for (int i = 0; i < kBlockCount; ++i) {
uintptr_t item = 0;
SUCCEED_IF(e == 0);
vec[i] = item;
}
std::sort(&vec[0], &vec[0] + kBlockCount);
auto it = std::unique(&vec[0], &vec[0] + kBlockCount);
SUCCEED_IF(it == &vec[0] + kBlockCount);
for (auto& ptr : vec) {
}