草庐IT

buffer_memory_barrier

全部标签

c++ - 为什么 RegisterClass 因 ERROR_NOT_ENOUGH_MEMORY 而失败?

很快,我的问题是,当有大量可用内存时,为什么WinAPIRegisterClass会失败并返回ERROR_NOT_ENOUGH_MEMORY,我该怎么做才能防止它发生?背景:我正在开发一个应用程序(WinSCPFTP/SFTP客户端),许多人使用它来自动传输文件。有些人每天每分钟都在通过Windows调度程序运行它。我收到很多报告,在运行一定次数后应用程序停止工作。触发问题的运行次数似乎并不准确,但在几万到几十万之间。此外,问题似乎仅在Windows调度程序下运行时出现,而不是在常规Windowssession中运行时出现。虽然我不能100%证实这一点。此外,所有报告似乎都针对Wind

c++ - Google Protocol Buffers - 缺少必填字段,即使所有字段显然都存在

我正在尝试通过TCP发送ProtocolBuffer消息,但在接收方尝试解析时出现“缺少必填字段”错误,即使显然所有字段都在那里。我在包含消息长度的消息之前发送一个4字节的header。消息定义如下:messageReplayRequest{requiredstringchannel=1;requireduint32start=2;requireduint32end=3;}在客户端,我对header进行编码并将消息序列化为vector。ReplayRequestreq;req.set_channel("channel")req.set_start(1);req.set_end(5);i

c++ - omp 临界区后是否存在隐式 Barrier

在omp临界区之后是否存在隐式omp屏障例如,我可以将以下代码版本1修改为版本2吗?版本-1intmin=100;#pragmaompparallel{intlocalmin=min;#pragmaompforschedule(static)for(inti=0;i版本2intmin=100;#pragmaompparallel{intlocalmin=min;#pragmaompforschedule(static)nowaitfor(inti=0;i版本1和版本2会得到相同的结果吗?omp临界区后是否存在隐式屏障?编辑:如果这个例子很差,我很抱歉。另外,我想知道版本1和版本2之间是

c++ - 强制 boost::asio::buffer 按值复制

我使用boost::asio::buffer来发送消息voidSend(conststd::string&messageData){socket.async_write(boost::asio::buffer(messageData),...);}并且在io_service线程的某处遇到“字符串迭代器不可取消引用”运行时错误。当我创建对象的变量来存储缓冲区的消息数据时:voidSend(conststd::string&messageData){this->tempStorage=messageData;socket.async_write(boost::asio::buffer(th

c++ - 解析 Google Protocol Buffer 的文本文件

根据示例代码https://developers.google.com/protocol-buffers/docs/cpptutorial,它们展示了如何在二进制格式的原型(prototype)文件中进行解析。使用tutorial::AddressBookaddress_book;{//Readtheexistingaddressbook.fstreaminput(argv[1],ios::in|ios::binary);if(!address_book.ParseFromIstream(&input)){cerr我尝试为文本格式的输入文件删除ios::binary,但仍然无法读取文件

c++ - ADsOpenObject() 返回 -2147024882 (0x8007000E) -> OUT_OF_MEMORY

我有一个用于身份验证的C++DLL,它会在每次登录时由Windows服务加载。在该DLL中,我使用了WindowsADSI函数ADsOpenObject()从ActiveDirectory获取用户对象。HRESULThr=ADsOpenObject(L"LDAP://rootDSE",L"username",L"password",m_dwADSFlags,IID_IDirectorySearch,(void**)&m_DSSearch);通常这多年来一直有效。但目前我得到错误代码-2147024882(0x8007000E)这是OUT_OF_MEMORY.当我重新启动使用我的DLL的

c++ - 将 `Vertex Buffer Object` 绑定(bind)到 `Vertex Array Objects` 后,我应该删除它吗?

我创建了一个VBO(顶点缓冲区对象)和VAO(顶点数组对象)并执行了以下操作:glBindVertexArray(vao);glBindBuffer(GL_ARRAY_BUFFER,vbo);glBufferData(...);glVertexAttribPointer(...);glEnableVertexAttribArray(0);glBindVertexArray(0);我可以在完成此操作后删除vbo,然后假设一切正常,然后使用vao绘制吗?我知道缓冲区绑定(bind)到vao所以我假设我可以。问题是,如果我在我的计算机(Intel图形)上删除缓冲区,它会工作得很好(一切都正确

c++ - 为什么 `polymorphic_allocator` 采用 `memory_resource` 指针而不是引用?

C++17标准说:[mem.poly.allocator.ctor]polymorphic_allocator(memory_resource*r);Requires:risnon-null.Effects:Setsmemory_­rsrctor.Throws:Nothing.[ Note:Thisconstructorprovidesanimplicitconversionfrommemory_­resource*.— endnote ]接受memory_resource*有什么意义?而不是memory_resource&如果“需要”子句提到r必须是非空的?Bloomberg¹风格指

c++ - GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 检查期间编译时出现 Protocol Buffer 错误

我目前收到一个错误,它指向protoc生成的头文件中的这些行:#if2006001但我的协议(protocol)版本与上面的版本匹配:protoc--versionlibprotoc2.6.1我做错了什么?最初我的protoc版本是3.0.0然后通过同步回2.6.1并执行这些步骤重新安装它;makedistclean,./configure,make,makeinstall安装所需的2.6.1版本。我需要旧版本,因为那是我们服务器中安装的版本。 最佳答案 问题是您系统上安装的header(在/usr/include/google/p

c++ - 了解 MSVC++ 中的 "Buffer Security Check/GS"编译器选项

我最近惊讶地注意到,在MSVC++2010中使用/GS(启用缓冲区安全检查)进行编译似乎在某些情况下对运行时性能具有不可忽略的影响。有没有人有过这样的经历??对于大型科学风格的应用程序(网格生成库),似乎使用/GS-进行编译可以使我的几个大型基准测试的运行时间提高近10%测试套件(“大”是>=1秒的运行时间)。/GS在MSVC++2010中的所有优化级别默认处于启用状态。我必须承认,我以前从未过多关注过这个选项,我想澄清一下它的实际作用。在线documentation似乎广泛谈论字符串缓冲区,但由于我不在任何地方使用string或char[]缓冲区,我一定遗漏了一些东西。这段(来自在线