add rust support (#113)
* add rust support * move aligned_size to sizeclass.h * add static qualifier * adjust CMakeLists.txt, may broke CI tests * fix msvc's complaining on c++17 * use SNMALLOC_FAST_PATH as the decorator of aligned_size * adapt new alignment algorithm and add related test Co-authored-by: mjp41 <mattpark@microsoft.com> * fix test cases for msvc * add extra test for size == 0 * treat memory block of same sizeclass as the same * fix formatting problem * remove extra declarations Co-authored-by: Matthew Parkinson <mjp41@users.noreply.github.com>
This commit is contained in:
committed by
Matthew Parkinson
parent
4212ac8e4e
commit
8304dedd17
@@ -8,6 +8,62 @@ snmalloc::sizeclass_t size_to_sizeclass(size_t size)
|
||||
return snmalloc::size_to_sizeclass(size);
|
||||
}
|
||||
|
||||
void test_align_size()
|
||||
{
|
||||
bool failed = false;
|
||||
|
||||
assert(snmalloc::aligned_size(128, 160) == 256);
|
||||
|
||||
for (size_t size = 1;
|
||||
size < snmalloc::sizeclass_to_size(snmalloc::NUM_SIZECLASSES - 1);
|
||||
size++)
|
||||
{
|
||||
size_t rsize = snmalloc::sizeclass_to_size(size_to_sizeclass(size));
|
||||
|
||||
if (rsize < size)
|
||||
{
|
||||
std::cout << "Size class rounding shrunk: " << size << " -> " << rsize
|
||||
<< std::endl;
|
||||
failed |= true;
|
||||
}
|
||||
|
||||
auto lsb_rsize = rsize & (~rsize + 1);
|
||||
auto lsb_size = size & (~size + 1);
|
||||
|
||||
if (lsb_rsize < lsb_size)
|
||||
{
|
||||
std::cout << "Original size more aligned than rounded size: " << size
|
||||
<< " (" << lsb_size << ") -> " << rsize << " (" << lsb_rsize
|
||||
<< ")" << std::endl;
|
||||
failed |= true;
|
||||
}
|
||||
|
||||
for (size_t alignment_bits = 0; alignment_bits < snmalloc::SUPERSLAB_BITS;
|
||||
alignment_bits++)
|
||||
{
|
||||
auto alignment = (size_t)1 << alignment_bits;
|
||||
auto asize = snmalloc::aligned_size(alignment, size);
|
||||
|
||||
if (asize < size)
|
||||
{
|
||||
std::cout << "Shrunk! Alignment: " << alignment << " Size: " << size
|
||||
<< " ASize: " << asize << std::endl;
|
||||
failed |= true;
|
||||
}
|
||||
|
||||
if ((asize & (alignment - 1)) != 0)
|
||||
{
|
||||
std::cout << "Not aligned! Alignment: " << alignment
|
||||
<< " Size: " << size << " ASize: " << asize << std::endl;
|
||||
failed |= true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (failed)
|
||||
abort();
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
setup();
|
||||
@@ -53,4 +109,6 @@ int main(int, char**)
|
||||
|
||||
if (failed)
|
||||
abort();
|
||||
|
||||
test_align_size();
|
||||
}
|
||||
Reference in New Issue
Block a user