作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
float* tempBuf = new float[maxVoices]();
上面的结果会不会
1) 16 字节对齐的内存?
2) 确认是连续的内存?
我想要的是:
float tempBuf[maxVoices] __attribute__ ((aligned));
但作为堆内存,这将对 Apple Accelerate 框架有效。
谢谢。
最佳答案
内存将对齐 float
,但不一定适用于特定于 CPU 的 SIMD 指令。我强烈怀疑你的系统sizeof(float) < 16
,但是,这意味着它没有像您想要的那样对齐。内存将是连续的:&A[i] == &A[0] + i
.
如果您需要更具体的信息,new std::aligned_storage<Length, Alignment>
将返回一个合适的内存区域,当然假设您确实通过了更具体的对齐。
另一种选择是 struct FourFloats alignas(16) {float[4] floats;};
- 这可能更自然地映射到框架。你现在需要做 new FourFloats[(maxVoices+3)/4]
.
关于C++11 : Does new return contiguous memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273789/
我是一名优秀的程序员,十分优秀!