我阅读了一些关于缓存错过优化的内容,并了解了这个stdlib函数。它为优化做了某种内存对齐,但是any1能帮助我解释这个函数到底做了什么吗?它采用3个参数:void* * memptr、size_t对齐方式、size_t大小
我不明白的是文件的含义
“在对齐指定的边界上对齐所分配的大小字节.”
我从阅读中理解的是分配一个内存块大小为大小的函数,但在那之后,我不明白它们是什么“边界”.是内存块被分解成更小的块,大小是对齐的吗?
以下是文档:memalign.html
发布于 2010-07-30 10:59:32
我阅读了一些关于缓存错过优化的内容,并了解了这个stdlib函数。它为优化做了某种内存对齐,但是any1能帮助我解释这个函数到底做了什么吗?
该函数的主要目的是分配一个与页面大小一致的缓冲区。这很少是为了性能而做的--通常是因为需要一个适合设备驱动程序/直接硬件访问的缓冲区。
大部分性能与内存对齐问题已经由编译器自己解决了。例如,所有基本类型-- char、short、int、long --都已在内存中(或struct内部)自然对齐:变量(或struct的字段)的地址可被变量的大小所除。为了达到这个目的,使用了填充。(例如,在char a; int b;中,a之后将添加sizeof(char)-sizeof(int)字节,以确保b的地址在sizeof(b)上对齐。)
我不明白他们所说的“边界”是什么意思.这是内存块被分解成小块与大小对齐吗?
H/W装置(尤指))通常将内存看作N个字节上的块,每次只能访问N个字节。上下文中的边界是块的开始,就像在“块边界”中。
现在,我不情愿地提到了对性能的影响。记住,过早的优化是万恶之源。这些技巧具有高度的平台性和特定的CPU特性,因此通常不应使用:
std::map< struct aaa *, void * >。如果struct aaa包含大量字段,为了最小化缓存占用,将用于比较的所有字段(键字段)放在结构的开头。如果关键字段分布在结构上,则在最坏的情况下,每个键字段都会碰到缓存行。如果在结构开始时将关键字段组合在一起,那么比较可能会接触到更少的缓存行。较少的缓存行数据需要,更多的缓存留给应用程序的其余部分。缓存行大小通常不适用于应用程序,尽管利用各种伎俩可以找到它。我刷了很多小细节,以保持相对较短。如果你想知道更多关于它,然后阅读一些CPU手册是建议。英特尔有相当好的开发人员手册。
https://stackoverflow.com/questions/3370347
复制相似问题