首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么需要缓存内存对齐?

为什么需要缓存内存对齐?
EN

Stack Overflow用户
提问于 2018-01-03 08:20:04
回答 1查看 108关注 0票数 0

我的工作是mips32,gcc编译器与微mips优化.每个核心都有自己的缓存内存。核心A操作系统- ThreadX,核心B os - rtos。我希望将指针和大小从核心A传递到核心B。让我们看看下面的流程:

代码语言:javascript
复制
1. Core A(ThreadX): pass pointer and size to Core B
2. Core B(RTOS): write to pointer size bytes
3. Core B(RTOS): flush(pointer)
4. Core A(ThreadX): pointer cacheInvalidate(pointer)
5. Core A(RTOS): copy from pointer to buffer

我工作的地址不对齐,似乎引起了一些意想不到的问题。在传递对齐地址后,我未能再现这些问题。我必须使用对齐地址吗?为什么?如果我将传递未对齐地址,我应该期望什么行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-03 08:29:14

如果您关心便携C,不要在这么低的级别进行推理。如果不这样做,请查看编译器生成的汇编程序代码(例如,将gcc -O -fverbose-asm -SGCC结合使用)。

如果你关心一个特定的实现,你应该提到它(编译器和版本,优化标志,操作系统,处理器和品牌)。但要当心未定义行为,做UB的惊慌

如果使用C:使用C99编写代码,则需要操作系统的支持,例如线程(7) (它使用futex(7))。所以读一个线程教程。使用符合C11的实现(请参阅n1570),您可以使用原子运算

我必须使用对齐地址吗?

也许是的。您的硬件访问对齐数据的方式与非对齐数据不同(而且更快、更“原子”)。缓存一致性在细节上是特定于特定处理器的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48073612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档