- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有办法在不先创建 vector 的本地实例的情况下对 std::vector 进行 posix_memalign?我遇到的问题是我需要告诉posix_memalign分配多少空间,我不知道怎么说
sizeof(std::vector<type>(n))
实际上没有创建新的 vector 。
谢谢
最佳答案
嗯,这里有两种尺寸。 vector
本身通常只是一个或两个指向某些已分配内存的指针,以及跟踪大小和容量的无符号整数。还有分配的内存本身,这就是我认为你想要的。
您要做的是创建一个 vector
将使用的自定义分配器。到时候,它将使用您的分配器,您可以拥有自己的特殊功能。我不会讨论 full details一个分配器,但细节:
template <typename T>
struct aligned_allocator
{
// ...
pointer allocate(size_type pCount, const_pointer = 0)
{
pointer mem = 0;
if (posix_memalign(&mem, YourAlignment, sizeof(T) * pCount) != 0)
{
throw std::bad_alloc(); // or something
}
return mem;
}
void deallocate(pointer pPtr, size_type)
{
free(pPtr);
}
// ...
};
然后你会像这样使用它:
typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;
aligned_T_vector vec;
vec.push_back( /* ... */ ); // array is aligned
但要重申第一点,vector
的大小是相同的,无论它包含多少元素,因为它只指向一个缓冲区。只有该缓冲区的大小发生变化。
关于c++ - std::vector 的 posix_memalign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340311/
我正在努力寻找如何正确使用 pread 和 pwrite。在本例中,我尝试使用 pread 仅读取 256 个字节。但是,无论何时我尝试读取少于 512 字节的 pread 都不会返回任何内容。我相信
我在 posix_memalign 中遇到此异常。知道为什么我们会得到它吗? 提前致谢。 最佳答案 中断的系统调用通常是系统调用被中断的结果。换句话说,进程在执行调用时正在接收信号。 关于c - po
posix_memalign 捕获信号吗?我使用 posix_memalign 分配内存并在后台运行计时器,我从日志中的 posix_memalign 收到“系统调用中断异常”。 是因为定时器信号吗?
在下面的代码中,是否需要释放allocated_memory2和allocated_memory3?你认为这段代码没有内存泄漏吗? class data { public: data();
我正在使用 posix_memalign 来获取一些内存对齐内存。 手册页 说 大小必须是2的幂 和 sizeof(void*) 的倍数 我试过这个调用看看会发生什么 void* ptrs; in
我正在尝试决定是否应该使用 memalign() 而不是 malloc(),因为对齐内存会使我的工作更轻松。我在这里阅读了 GNU 文档 ( http://www.gnu.org/software/l
我在 ubuntu 15.04 上使用 GCC 4.9。我在 Eclipse CDT 中编码。这是一个 C 程序,方言设置为 c99。出于某种原因,我的编译器一直警告我这个...... warning
我正在开发一种使用平铺的高速缓存高效转置算法,我注意到当我使用 malloc 分配内存时,我获得的性能比使用 posix_memalign 时更差。更具体地说: 使用 malloc:98.7 毫秒 使
我现在面临着 posix_memalign 的问题,这可能是由我大脑中关于指针和变量的一个大结引起的。我已经有一段时间没有使用 C 语言了,需要再次找到我的方法。 我正在尝试使用 posix_mema
int posix_memalign(void **memptr, size_t alignment, size_t size); 分配 size 字节,按 alignment 对齐。成功返回 0,失
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: When do we need to use posix_memalign instead of mallo
我阅读了一些有关缓存未命中优化的内容,并了解了这个 stdlib 函数。它会进行某种内存对齐以进行优化,但是 any1 可以帮我解释一下这个函数的真正作用吗?它需要 3 个参数:void* * mem
我试图了解 memalign() 和 posix_memalign() 的功能。阅读可用的文档没有帮助。 有人可以帮我了解它的工作原理和用途吗?或者,也许提供一个使用示例? 我正在尝试了解 linux
我是 Android 项目的新手。对于我的新任务,我需要为 Android 平台构建一个项目。我能够使用 Android ndk 使用 cmakelists.txt 为 Android 成功生成 ma
如何posix_memalign对齐大小为 4096 字节与 mmap 不同?它在内部使用 mmap 还是其他一些机制? 最佳答案 posix_memalign 是比 mmap 更高级别的 API,旨
有没有办法在不先创建 vector 的本地实例的情况下对 std::vector 进行 posix_memalign?我遇到的问题是我需要告诉posix_memalign分配多少空间,我不知道怎么说
我目前正在尝试在 Windows 中构建 word2vec。但是 posix_memalign() 函数有问题。大家都建议用_aligned_malloc(),只是参数个数不一样。那么 Windows
似乎 posix_memalign 让您选择自定义的对齐方式,但什么时候需要这样做? malloc内部已经做好了对齐工作。 更新 我问这个的确切原因是因为我看到 nginx 这样做,ngx_memal
对齐的malloc是posix_memalign,没问题,但是对齐的realloc呢? realloc 是否保留对齐方式或如何确保重新分配的内存具有相同的对齐方式?假设 Linux 和 x86_64。
如果我传递了一个内存位置,我正在尝试弄清楚如何初始化一个结构,下面的情况是我正在尝试做的,但它抛出缩短为相关代码的“无效初始化程序” #ifndef PAGE_ALLOC_H #define PAGE
我是一名优秀的程序员,十分优秀!