草庐IT

c++ - 类型是否可能具有 'n-byte alignment' 以外的对齐要求

例如,考虑以下内容:假设int是4字节对齐的,long是8字节对齐的。structexample{inta;longb;intc;};编译器将其放置在内存中的明显方式是:AAAAPPPPBBBBBBBBCCCCPPPP,整个结构具有8字节对齐。P指的是一个字节的paddingA指的是a的一个字节B指的是b的一个字节C指的是c的一个字节在这种情况下,sizeof(example)是24。但另一种方法如下:AAAABBBBBBBBCCCC整个结构对齐,使得起始字节的地址mod8=4(不确定如何更简洁地说)在这种情况下,不需要填充,因此每个实例可以节省8个字节。我的问题是,是否允许编译器这样

c++ - D3D11 : How to draw a simple pixel aligned line?

我试图用D3D11在两个顶点之间画一条线。我在D3D9和D3D11中有一些经验,但在D3D11中绘制一条线似乎是一个问题,该线从一个给定像素开始并在另一个给定像素结束。我做了什么:我将0.5f添加到每个顶点的像素坐标以适应纹素/像素坐标系(我阅读了Microsoft页面以了解D3D9和D3D11坐标系之间的差异):f32fOff=0.5f;彩色顶点newVertices[2]={{D3DXVECTOR3(fStartX+fOff,fStartY+fOff,0),vecColorRGB},{D3DXVECTOR3(fEndX+fOff,fEndY+fOff,0),vecColorRGB}

c++ - 这段代码不应该根据标准中的 12.8p2 编译吗?

此代码无法在VS2010中编译。它发出错误C2440:“参数”:无法从“A”转换为“A&”,但根据标准中的12.8p2,A::A(A&)是有效的复制构造函数,并且a是main()中表达式Ab=foo(a);的左值。#includeclassA{public:intx;A(inta){x=a;std::cout 最佳答案 我会说这取决于您所谈论的标准。假设使用C++11,那么我的看法是它应该没问题并且应该产生以下结果:Constructor正如您指出的,传递给foo的a是一个左值。但是,foo的返回值是一个右值,因此应该在C++11之

c++ - g++4.9 不支持 std::align

在了解对齐问题等时,我意识到我的g++4.9(macportsOSX)实现不支持std::align。如果我尝试编译(使用-std=c++11)来自http://www.cplusplus.com/reference/memory/align/的示例代码//alignexample#include#includeintmain(){charbuffer[]="------------------------";void*pt=buffer;std::size_tspace=sizeof(buffer)-1;while(std::align(alignof(int),sizeof(cha

c++ - 我什么时候应该使用_aligned_malloc()?

我一直在阅读遗留代码,其中包含自定义内存池系统,然后我发现该代码使用了_aligned_malloc。我想知道这个功能是什么,我什么时候必须使用它。谢谢大家。我确实阅读了MSDN,但我想要的是类似“想要特定对齐的原因的一个示例是在x86上将数据与SSE指令集一起使用,其中数据必须对齐到16的倍数”。我终于明白那些代码是什么意思了。再次感谢。 最佳答案 当内存分配的对齐对您很重要时,此函数很有用。对齐是指返回的指针的数值必须能被某个数整除,即。((unsignedint)ptr)%alignment的计算结果应为0。需要特定对齐的一个

c++ - 如何使用 std::aligned_union

在尝试学习如何使用std::aligned_union时,我找不到任何示例。我的尝试遇到了我不知道如何解决的问题。structinclude{std::stringfile;};structuse{use(conststd::string&from,conststd::string&to):from{from},to{to}{}std::stringfrom;std::stringto;};std::aligned_union::typeitem;*reinterpret_cast(&item_)=use{from,to};当我尝试在VC++2013Debug模式下运行程序时,我在me

c++ - alignas 说明符 vs __attribute__(aligned),c++11

我目前正在使用C++11开发操作系统内核,我遇到了一个问题,我似乎无法找到自己的答案。目前我正在对齐我的分页结构,使用编译器特定的属性(例如gcc的__attribute__(aligned)),但是我想改用C++11alignas说明符,在Clang++这不是问题,因为它很乐意接受4096对齐作为alignas的参数,但是G++不接受!所以首先,alignasspecifier和gcc__attribute__(aligned)之间的主要区别是什么,显然两者都确保与特定值对齐,但是gcc中的alignas说明符似乎有128的限制,而属性似乎几乎没有限制,这是为什么?另外,为什么不能将

c++ - `std::alignment_of` 与 `alignof`

我刚刚偶然发现了std::alignment_of类型特征,以及它即将成为friend的std::alignment_of_v。它们似乎经过专门设计,相当于对alignof的简单调用。,并且将来添加的_v助watch明它不仅仅是一个遗留位。当我们有alignof时,std::alignment_of(_v)有什么用? 最佳答案 它们几乎完全是多余的。正如@Revolver指出的那样,它们在不同的论文中被介绍过,并且alignment_of来自boost几乎一字不差。但这并不意味着该特征是无用的。Atemplateclass可以传递给

c++ - aligned_storage 的基本用途是什么?

std::tr1::aligned_storage的基本用法是什么?它可以用作像下面这样的数据类型Foo的自动存储器吗?structFoo{...};std::tr1::aligned_storage::value>::typebuf;Foo*f=new(reinterpret_cast(&buf))Foo();f->~Foo();如果是这样,在buf中存储多个Foo怎么样,std::tr1::aligned_storage::value>::typebuf;Foo*p=reinterpret_cast(&buf);for(inti=0;i!=5;++i,++p){Foo*f=new(

使用 P2P 的 C++ 和 voIP

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我目前正在计划我的最后一年项目,我希望创建一个支持IP语音和基于文本的聊天的应用程序(尽管不是“下一个Skype”)。我只是真的想要一种易于使用的轻量级方法来完成voIP部分,它不需要扩展功能,至少不需要开始。我想要的功能之一是它不通过服务器,但那是因为我不想在应用程序发布后维护服务器。因此,如果可以将您的IP提供给某人并且他们加入使用它会更好。我计划将