草庐IT

memory-alignment

全部标签

c++ - 为什么 char 数组的 alignof 总是 1?

我正在阅读一些关于C++中对齐的内容,但我不确定为什么仅包含char数组成员的类的对齐不是数组的大小,但事实证明始终为1。例如#includestructFoo{charm_[16];};//shouldn'tthishavea16bytealignment?!intmain(){std::coutLiveonColiru在上面的代码中很明显sizeof(Foo)是16,但是它的对齐是1,看代码的输出。为什么alignof(Foo)在这种情况下是1?请注意,如果我将charm_[16];替换为intm_;之类的基本类型,那么alignof(Foo)就会变成我想要的已经预料到了,即siz

c++ - 通过 https 发布时出现 "CURLE_OUT_OF_MEMORY"错误

我正在尝试编写一个使用libCurl将soap请求发布到安全Web服务的应用程序。此Windows应用程序是针对libCurl版本7.19.0构建的,而后者又是针对openssl-0.9.8i构建的。相关的curl相关代码如下:FILE*input_file=fopen(current->post_file_name.c_str(),"rb");FILE*output_file=fopen(current->results_file_name.c_str(),"wb");if(input_file&&output_file){structcurl_slist*header_opts=0

c++ - 如何测试 std::memory_order_relaxed 的行为?

我已经阅读了std::memory_order_relaxed的文档.Relaxedordering的部分解释是......//Thread1:r1=y.load(memory_order_relaxed);//Ax.store(r1,memory_order_relaxed);//B//Thread2:r2=x.load(memory_order_relaxed);//Cy.store(42,memory_order_relaxed);//D对此的解释是……[It]isallowedtoproducer1==r2==42.Inparticular,thismayoccurifDisc

c++ - MSVC 默认内存对齐为 8

根据MSDN,/Zp命令默认为8,这意味着使用64位对齐边界。我一直假设对于32位应用程序,MSVC编译器将使用32位边界。例如:structTest{charfoo;intbar;};编译器会像这样填充它:structTest{charfoo;charpadding[3];intbar;};因此,由于默认使用/Zp8,这是否意味着使用上面的相同示例我的填充变为7+4字节:structTest{charfoo;charpadding1[7];intbar;charpadding2[4];};//Structurehas16bytes,endingonan8-byteboundary这有

c++ - "BUS_ADRALN - Invalid address alignment"错误是什么意思?

我们在HPUX上,我的代码在C++中。我们得到了BUS_ADRALN-Invalidaddressalignment在我们的函数调用中的可执行文件中。这个错误是什么意思?相同的功能运行了很多次,然后突然出现了核心转储。在GDB中,当我尝试打印它不在上下文中的对象值时。知道在哪里检查吗? 最佳答案 您遇到了数据对齐问题。这可能是由于尝试通过某种错误的指针读取或写入造成的。数据对齐问题是指指针指向的地址未正确“对齐”。例如,某些体系结构(例如旧的Cray2)要求任何从内存中读取除单个字符以外的任何内容的尝试只能通过指针值的最后3位为0的

c++ - GDB bt 错误 : "Not enough registers or memory available to unwind further"

来自核心文件的回溯由于以下原因削减了有用的信息:Backtracestopped:Notenoughregistersormemoryavailabletounwindfurther.为什么会出现此消息,我可以做些什么吗? 最佳答案 尝试使用-O0标记构建例如。CFLAGS="-g-O0" 关于c++-GDBbt错误:"Notenoughregistersormemoryavailabletounwindfurther",我们在StackOverflow上找到一个类似的问题:

c# - C++ x86/x64 结构对齐 + .NET AnyCPU C++ 库使用(调用/回调)

由于我之前的问题没有成功(“C#AnyCPUlibraryusingx86/x64CAPI-packingstructures,callsandcallbacks”),我将写一个更简洁和抽象的问题。p>图片:我工作的公司有一个软件要移植到64位上。该软件由一个BASE库(带有CAPI的C++)和两个CAPI包装器组成:一个C++包装器和一个.NET包装器。C++BASE库和C++WRAPPER应该有x86/x64构建配置。.NETWRAPPER应该只有一个AnyCPU构建配置。从.NETWRAPPER中选择正确的库已成功完成(C++BASE库(x86/x64)正在两个单独的命名空间中加

c++ - 将 "Out of Memory"错误写入文件,没有内存?

如果程序内存不足,我想记录并可能警告用户,让他们有机会尝试释放一些内存(希望如此)。虽然我可以预先分配显示情况所需的必要GUI实体,但我担心的是,在这种情况下可能无法使用cstdio进行更多基本操作,例如打开或写入文件。我的问题是,如果一个程序根本不能再动态分配内存,是否仍然可以使用cstdio?是否需要采取任何特殊措施,例如预先打开文件或将其设置为不使用缓冲区?cstring函数仍然可以运行吗?在这种情况下还有其他可能需要了解的障碍吗?(在这种情况下警告用户是一种奢侈,主要目的是将错误记录到文件中,然后尝试使用cstdio挽救相关数据,然后按此顺序警告用户)

c++ - 我不明白在下面的代码中将 char buffer[] 与 X 类型的对象对齐的原因

Stroustrup在他的新书第151页中展示了以下使用类型说明符alignas的示例:Sometimes,wehavetousealignmentinadeclaration,whereanexpression,suchasalignof(x+y)isnotallowed.Instead,wecanusethetypespecifieralignas:alignas(T)means"alignjustlikeaT."Forexample,wecansetasideuninitializedstorageforsometypeXlikethis:voiduser(constvector

c++ - 在不丢失对齐的情况下优化打包递归模板化结构

我有一个来自模板参数的4个类型字段的结构:templatestruct__attribute__((aligned(8)))four_tuple{typedefstruct{T1t1;T2t2;T3t3;T4t4;}payload;payloadp;};每种类型T1,T2,T3,和T4,保证是原始类型或four_tuple::payload类型。保证是递归的——您可以将结构视为对quadtree进行编码其叶节点是原始类型。我的目标是使结构尽可能少sizeof,条件是所有叶节点都正确对齐。允许优化的工具是类模板特化,使用:字段重新排序t1,t2,t3,t4添加填充字段gcc属性packe