2011-11-29 145 views
2

通常,指针的大小等于CPU的“宽度”,因此指针通常可以访问每个系统地址。在32/64位系统上使用16位指针的C++

在一个64位系统上使用一个16位指针应该允许在同一个内存区域中配置4个16位指针作为一个64位指针,然而一个16位指针只允许寻址2^16个位置。

我的想法不是关于节省内存,而是关于潜在的性能优势。这个想法基本上是以65635块的形式分配内存,并使用16位指针来解决这些“虚拟”16位地址空间。

这可能吗?我是否应该尝试这样做,即它是否会提供性能优势?

+1

要知道的唯一方法是尝试和配置文件。但我怀疑它。 – PlasmaHH

+0

性能好处?你可以做到这一点并进行测试,但我没有看到为什么它应该更快的理论原因。恐怕你可以开始从amd64上的32位到64位寄存器移动数据,因为没有什么好的理由,将你的16位指针转换为CPU使用的真正的64位地址...... – 2011-11-29 13:53:55

+1

为什么你认为这会提高性能?你认为这样会更快,为什么? – sth

回答

5

更可能是一个性能命中。现代CPU可以轻松访问32位和64位数据宽度。如果您有16位数据,则​​需要屏蔽等,以计算CPU中的实际地址。

进一步阅读的指针是未对齐访问。

2

如果你有一个32/64位的系统,它有足够的内存使得你的方案的优化好处被实现它的复杂性所抵消。你需要确保它能够正常工作,并且你的方案比直接指针访问要慢得多。