我刚刚完成了一项测试,作为求职面试的一部分,一个问题让我感到难过 - 甚至使用谷歌作为参考.我想看看stackoverflow工作人员可以用它做什么:
"memset_16aligned"函数需要传递给它的16byte对齐指针,否则它将崩溃.
a)如何分配1024字节的内存,并将其与16字节边界对齐?
b)执行memset_16aligned后释放内存.
{
void *mem;
void *ptr;
// answer a) here
memset_16aligned(ptr, 0, 1024);
// answer b) here
}
Run Code Online (Sandbox Code Playgroud) 我正在研究单个生产者单个消费者环缓冲区实现.我有两个要求:
1)将单个堆分配的环形缓冲区实例与高速缓存行对齐.
2)将环形缓冲区内的字段与高速缓存行对齐(以防止错误共享).
我的班级看起来像:
#define CACHE_LINE_SIZE 64 // To be used later.
template<typename T, uint64_t num_events>
class RingBuffer { // This needs to be aligned to a cache line.
public:
....
private:
std::atomic<int64_t> publisher_sequence_ ;
int64_t cached_consumer_sequence_;
T* events_;
std::atomic<int64_t> consumer_sequence_; // This needs to be aligned to a cache line.
};
Run Code Online (Sandbox Code Playgroud)
让我首先解决第1点,即对齐单个堆分配的类实例.有几种方法:
1)使用c ++ 11 alignas(..)说明符:
template<typename T, uint64_t num_events>
class alignas(CACHE_LINE_SIZE) RingBuffer {
public:
....
private:
// All the private fields.
};
Run Code Online (Sandbox Code Playgroud)
2)使用 …