草庐IT

memory-alignment

全部标签

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++ - 具有 memory_order_relaxed 的存储是否有可能永远不会到达其他线程?

假设我有一个线程A写入atomic_intx=0;,使用x.store(1,std::memory_order_relaxed);。如果没有任何其他同步方法,使用x.load(std::memory_order_relaxed);其他线程需要多长时间才能看到这一点?鉴于标准给出的C/C++内存模型的当前定义,写入x的值是否可能完全保持线程本地?我手头的实际案例是线程B频繁读取atomic_bool以检查它是否必须退出;另一个线程,在某个时候,将true写入此bool,然后在线程B上调用join()。显然我不介意在线程B甚至可以看到atomic_bool已设置之前调用join(),我也不

c++ - memory_order_acquire 真的足以锁定自旋锁吗?

根据AntonyWilliams的书C++ConcurrencyinAction,自旋锁可以按如下方式实现:classspinlock_mutex{std::atomic_flagflag;public:spinlock_mutex():flag(ATOMIC_FLAG_INIT){}voidlock(){while(flag.test_and_set(std::memory_order_acquire));}voidunlock(){flag.clear(std::memory_order_release);}};如果我没理解错的话,memory_order_acquire标签确保了

c++ - delete p where p is a pointer to array always a memory leak?

在一次软件session上的讨论之后,我着手确定使用普通delete删除动态分配的基元数组是否会导致内存泄漏。我已经编写了这个小程序并使用在WindowsXP上运行的visualstudio2008对其进行了编译:#include"stdafx.h"#include"Windows.h"constunsignedlongBLOCK_SIZE=1024*100000;int_tmain(){for(unsignedinti=0;i然后我使用任务管理器监视我的应用程序的内存消耗,令人惊讶的是内存被正确分配和释放,分配的内存没有像预期的那样稳定增加我修改了我的测试程序以分配一个非基本类型数组

c++ - 在 Qt Creator 中使用 'Analyze Memory' 工具

我正在使用QtCreator开发C++应用程序,我正在尝试追踪一些内存泄漏。我关注了theseinstructions*,并在我的Ubuntu机器上安装了Valgrind。我从AnalyzeMemory部分开始我的应用程序,在单击停止按钮后,我被告知ToolAnalyzeMemory已完成,发现928个问题。但是,分析部分没有显示任何结果,该部分仍为空白。我做错了什么吗?在哪里可以找到内存分析的结果?*令人困惑的是,说明要求“发布”构建配置,但选择此选项会导致Qt中出现警告,指出内存分析工具需要调试配置。两种方法我都试过了。 最佳答案

c++ - C++ 示例 "Memory barrier"

这个问题在这里已经有了答案:C++MemoryBarriersforAtomics(2个答案)关闭9年前。我正在阅读这个关于volatile关键字的问题的答案:https://stackoverflow.com/a/2485177/997112那个人说:Thesolutiontopreventingreorderingistouseamemorybarrier,whichindicatesbothtothecompilerandtheCPUthatnomemoryaccessmaybereorderedacrossthispoint.Placingsuchbarriersaroundo

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++ - boost::interprocess::managed_shared_memory 在不同版本的 boost 之间的兼容性

是否有明确的兼容性保证boost::interprocess::managed_shared_memory可以跨不同的boost版本工作?我打算用它在多个进程之间共享一个整数或十(这实际上将充当它们都读取和写入的一段数据的修订号)。这些进程是单独发布的,并且偶尔会终止使用。问题是:我是否会因为1.51中的managed_shared_memory无法与1.44中的managed_shared_memory进行对话而将自己永远锁定在给定的boost版本上? 最佳答案 根据BoostFAQ:HowcantheBoostlibraries