gpt4 book ai didi

c - 连续内存分配的好处

转载 作者:行者123 更新时间:2023-12-01 23:55:14 27 4
gpt4 key购买 nike

就性能而言,为矩阵分配连续的内存块与分配单独的内存块有什么好处?即,而不是编写这样的代码:

char **matrix = malloc(sizeof(char *) * 50);
for(i = 0; i < 50; i++)
matrix[i] = malloc(50);

给我 50 个不同的 block ,每个 block 50 个字节和一个 50 个指针的 block ,如果我要写的话:
char **matrix = malloc(sizeof(char *) * 50 + 50 * 50);
char *data = matrix + sizeof(char *) * 50;
for(i = 0; i < 50; i++) {
matrix[i] = data;
data += 50;
}

给我一个连续的数据 block ,有什么好处?避免缓存未命中是我唯一能想到的,即使这样也仅适用于少量数据(小到足以放入缓存),对吧?我已经在一个小型应用程序上对此进行了测试,并注意到速度有所提高,并且想知道为什么。

最佳答案

这很复杂——你需要测量。

使用中间指针而不是计算二维数组中的地址很可能是当前处理器的损失,您的两个示例都这样做。

接下来,所有适合 L1 缓存的东西都是一个巨大的胜利。 malloc () 最有可能四舍五入为 64 字节的倍数。 180 x 180 = 32,400 字节可能适合 L1 缓存,而单个 malloc 可能分配 180 x 192 = 34,560 字节可能不适合,特别是如果您添加另外 180 个指针。

一个连续数组意味着您知道数据如何适合高速缓存行,并且您知道硬件中的页表查找次数最少。有数百个 malloc,无法保证。

关于c - 连续内存分配的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24151971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com