aligned_stack.cpp 1006 Bytes
Newer Older
1
#include "pls/internal/data_structures/aligned_stack.h"
FritzFlorian committed
2 3 4 5
#include "pls/internal/base/system_details.h"

namespace pls {
    namespace internal {
6 7 8 9 10 11
        namespace data_structures {
            aligned_stack::aligned_stack(char* memory_region, const std::size_t size):
                    memory_start_{memory_region},
                    memory_end_{memory_region + size},
                    head_{next_alignment(memory_start_)} {}

FritzFlorian committed
12
            std::uintptr_t aligned_stack::next_alignment(std::uintptr_t size) {
13
                std::uintptr_t miss_alignment = size % base::CACHE_LINE_SIZE;
FritzFlorian committed
14 15 16
                if (miss_alignment == 0) {
                    return size;
                } else {
17
                    return size + (base::CACHE_LINE_SIZE - miss_alignment);
FritzFlorian committed
18 19 20 21 22 23 24 25 26
                }
            }

            char* aligned_stack::next_alignment(char* pointer) {
                return reinterpret_cast<char*>(next_alignment(reinterpret_cast<std::uintptr_t >(pointer)));
            }
        }
    }
}