use*_*077 7 c++ alignment new-operator visual-studio
我在 Visual Studio 2017 C++17 中收到以下程序的错误:
#include <iostream>
int main()
{
using namespace std;
align_val_t alignment = (align_val_t)1024;
int* p = new(alignment) int(3);
cout << (unsigned long long)(p) % 1024;
delete p;
}
Run Code Online (Sandbox Code Playgroud)
错误 C2956 大小的释放函数“operator delete(void*, size_t)”将被选为放置释放函数
该程序在 gcc-8 中编译没有错误。VS中的程序如何解决?
这是 MSVC 中的一个错误,不幸的是,它被作为“低优先级”关闭:https://developercommunity.visualstudio.com/t/using-c17-new-stdalign-val-tn-syntax-results-in-er/528320。
解决方法:
直接致电接线员:
int* p = static_cast<int*>(operator new[](sizeof(int) * 3, align_val_t{1024}));
Run Code Online (Sandbox Code Playgroud)
但请注意,您还必须调用相应的operator delete[](void* ptr, std::align_val_t al).
std::aligned_alloc如果您可以忍受尺寸为对齐方式的倍数这一烦人的要求,请使用该方法。
使用 MSVC 的非标准_aligned_malloc(). 这必须与_aligned_free().
如果您使用的是 x86,请使用_mm_malloc(size, align)from immintrin.h(或仅使用intrin.h)。这也必须与 配对_mm_free(),但可以在 Windows、Linux 和 MacOS 之间移植。
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |