草庐IT

Menu_Memory

全部标签

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

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

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

c++ - 如何调试或修复涉及 boost::interprocess managed_shared_memory 的无限循环和堆损坏问题?

我收到以下“第一次机会异常”消息,该消息来self编写的DLL,该DLL在我未编写的可执行文件中运行。也就是说,DLL是一个插件。第一次触发此异常时,尝试打开共享内存映射文件失败。如果我忽略第一次机会异常而只是运行,应用程序最终会卡住或崩溃。First-chanceexceptionat0x76a7c41finnotmyexe.exe:MicrosoftC++exception:boost::interprocess::interprocess_exceptionatmemorylocation0x002bc644..几个小时后,它似乎是由一段无限循环的代码块引起的,直到预期的异常条件

带有栅栏和获取/释放的 C++ memory_order

我有以下C++2011代码:std::atomicx,y;std::atomicz;voidf(){x.store(true,std::memory_order_relaxed);std::atomic_thread_fence(std::memory_order_release);y.store(true,std::memory_order_relaxed);}voidg(){while(!y.load(std::memory_order_relaxed)){}std::atomic_thread_fence(std::memory_order_acquire);if(x.load(

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

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

c++ - VK_CONTROL/VK_MENU/VK_SHIFT 的默认值

我们的键盘上有2个CTRL/ALT/SHIFT按钮。但是winapi中有VK_CONTROL/VK_LCONTROL/VK_RCONTROL可用。那么哪个值是VK_CONTROL?VK_LCONTROL(左)或VK_RCONTROL(右)的默认值?或者它可能根据某些情况选择值(value)?在MSDN和Google中都找不到答案。我认为这与CTRL无关紧要-它们是交替的,但它与例如ALT. 最佳答案 来自WinUser.h的文本:VK_L*和VK_R*-左右Alt、Ctrl和Shift虚拟键。仅用作GetAsyncKeyState(

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++ - 为什么 `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++ - 网络游戏作弊: Is it possible to prevent one Win32 process from inspecting/manipulating another's memory?

我玩在线游戏《魔兽世界》,该游戏受到自动机器人的困扰,这些机器人检查游戏的分配内存以读取游戏/玩家/世界状态信息,这些信息用于机械地玩游戏。他们有时也会直接写入游戏的内存本身,但据我所知,更复杂的不会。该游戏的供应商BlizzardEntertainment有一个名为Warden的单独应用程序,它应该可以检测和禁用类似的黑客和作弊行为,但它并不能捕获所有内容。是否可以制作一个Windows应用程序,让您是唯一一个可以将您读入内存的内容读入内存的应用程序?在数百万台机器上运行的大型C++应用程序上实现这种做法是否实用? 最佳答案 做不

c++ - 'managed_shared_memory' 应该分配多少内存? ( boost )

我正在寻找关于在通过boost::interprocess的managed_shared_memory创建静态共享内存块时应该分配多少内存的明确答案(如果确实存在的话)。连officialexamples似乎分配arbitrarilylarge内存块。考虑以下结构://Example:simplestructwithtwo4-bytefieldsstructPoint2D{intx,y;};我最初的react是必要的大小是8个字节,或sizeof(Point2D)。当我尝试构造一个对象时,这惨遭失败,在运行时出现段错误。//BAD:8bytesisnowherenearenoughme