相关疑难解决方法(0)

如何仅使用标准库分配对齐的内存?

我刚刚完成了一项测试,作为求职面试的一部分,一个问题让我感到难过 - 甚至使用谷歌作为参考.我想看看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)

c memory-management

404
推荐指数
9
解决办法
17万
查看次数

在C++ 11中对齐内存的推荐方法是什么?

我正在研究单个生产者单个消费者环缓冲区实现.我有两个要求:

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)使用 …

c++ memory-alignment c++11

66
推荐指数
2
解决办法
3万
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

memory-alignment ×1

memory-management ×1