false 是用堆内存共享大小写吗?

Is false sharing the case with heap memory?

据我所知,错误共享 发生在多个线程试图读取放置在同一缓存行中的小块相邻数据时:

#include <omp.h>
#define NUM_THREADS 4

int main() {
    int arr[NUM_THREADS];

#   pragma omp parallel num_threads(NUM_THREADS)
    {
        const int id = omp_get_thread_num();
        arr[id] // doing something with it
    }
}

如果我动态创建数组呢?

int *arr = new int[NUM_THREADS];

如果我的数组在堆上,是否会发生错误共享?在这种情况下是否有一些缓存行限制?

记忆就是记忆。对于 cpu 来说,栈上的数组与堆上的数组完全一样。所以任何虚假共享问题都保持不变。