📄 uncachedbuffer.cpp
字号:
#include "UnCachedBuffer.h"namespace oxsemi{ UnCachedBuffer::UnCachedBuffer( unsigned long bufferSizeBytes, unsigned char alignmentPowerOf2) : uncachedAlignedMemory_(0), rawMemory_(0), rawSize_(0), requestedSize_(bufferSizeBytes) { // Calculate the alignment step size int alignmentBoundary = 1 << alignmentPowerOf2; // Create a mask for the l.s. bits of the address which correspond to // the alignment boundary unsigned long alignmentBoundaryMask = ~0UL << alignmentPowerOf2; // Allocate sufficient memory to allow for adjustment to an alignment // boundary rawSize_ = bufferSizeBytes + alignmentBoundary - 1; rawMemory_ = new unsigned char[rawSize_]; if (rawMemory_) { // Pointer to memory area which satisfies the alignment requirements unsigned char* alignedMemory; // Check the alignment of the allocated memory if ((reinterpret_cast<unsigned long>(rawMemory_) & ~alignmentBoundaryMask) == 0) { // Base of allocated memory is already on an alignment boundary alignedMemory = rawMemory_; } else { // Adjust memory base to an alignment boundary alignedMemory = reinterpret_cast<unsigned char*>((reinterpret_cast<unsigned long>(rawMemory_) & alignmentBoundaryMask)) + alignmentBoundary; } // Convert pointer to aligned cached memory to an uncached pointer#ifdef NO_UNCACHED_BUFFERS uncachedAlignedMemory_ = alignedMemory;#else uncachedAlignedMemory_ = TranslateCachedToUncached(alignedMemory);#endif } SetIsComplete(rawMemory_); } UnCachedBuffer::~UnCachedBuffer() { delete[] rawMemory_; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -