Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Memory alignment in custom stack allocator

Usually data is aligned at power of two addresses depending on its size.

How should I align a struct or class with size of 20 bytes or another non-power-of-two size?

I'm creating a custom stack allocator so I guess that the compiler wont align data for me since I'm working with a continuous block of memory.

Some more context:

I have an Allocator class that uses malloc() to allocate a large amount of data. Then I use void* allocate(U32 size_of_object) method to return the pointer that where I can store whether objects I need to store. This way all objects are stored in the same region of memory and it will hopefully fit in the cache reducing cache misses.

like image 741
Tiago Costa Avatar asked Oct 23 '25 21:10

Tiago Costa


1 Answers

C++11 has the alignof operator specifically for this purpose. Don't use any of the tricks mentioned in other posts, as they all have edge cases or may fail for certain compiler optimisations. The alignof operator is implemented by the compiler and knows the exact alignment being used.

See this description of c++11's new alignof operator

like image 186
ex0du5 Avatar answered Oct 25 '25 09:10

ex0du5



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!