莫若麦香

Results 2 comments of 莫若麦香

见官方[API参考手册](https://www.rt-thread.org/document/api/group__messagequeue.html#details)中"详细描述"一节,其中明确提到: `消息队列可以应用于发送不定长消息的场合` 只要所发送消息小于创建消息队列时指定的最大msg_size即可。 而且实际中也是有很多需要传输变长消息的需求的,如果只能传定长消息那就只能用固定消息头+动态分配payload内存的形式,这样带来的性能开销特别大。

感谢回复! > int32对齐时的原子性在arm,x86平台上是显而易见的 我认同这一点,但我觉得应该仅限于手写汇编代码使用单条指令完成赋值时。因为较真一点的话这一点只在arch的文档中有规定,例如aarch64上[在这里](https://developer.arm.com/documentation/den0024/a/The-A64-instruction-set/Memory-access-instructions/Memory-access-atomicity),但是其并没有规定C/C++代码的原子性。 就目前的C/C++标准来看也没有要求编译器在遇到aligned memory access时必须生成单条汇编指令,比如对int32的赋值完全可以生成4条int8 store来完成。 虽然不见得哪个编译器真会这么犯病,但是anyway我们写的代码是C而不是汇编嘛,我觉得还是应该尊重一下标准的。 至于您提到的linux,我印象中在必要时是会采用WRITE_ONCE/READ_ONCE两个宏`(其实是对volatile的封装)`来实现,不会直接赋值。