草庐IT

c++ - 是否可以哄 std::atomic<T> 输出 CMPXCHG16B

对于我对在Windowsx64上使用原子互锁操作不感兴趣的类型,是否可以哄骗std::atomic输出CMPXCHG16B,或者我是否只需要接受它并手动执行原子操作?我可以让GCC/Clang在Linux上执行此操作,所以我怀疑这只是Microsoft标准库的问题。structByte16{int64_ta,b;};std::atomicatm;Byte16a={1,2};atm.compare_exchange_strong(...);//ThishasalockonWindows,notonLinuxversionofcode 最佳答案

c++ - 使用 std::string 导致 Windows "Entry Point Not Found"

这个问题在这里已经有了答案:theprocedureentrypoint__gxx_personality_v0couldnotbelocated(5个答案)关闭4年前。当我用G.C.C.编译它时:#include#includeintmain(){std::cout通过使用以下批处理:g++-Wallmain.cc并尝试执行输出(a.exe),然后Windows因以下错误使初始化崩溃:如果我避免使用std::string在C++代码中它正常执行,甚至包括.有什么想法吗?注意,第一次测试std::string.我运行Windows8/64位。我的编译器包含此文件build-info.t

c++ - std::vector 在加载/清除大量数据时变得越来越慢

问题我有一个非常复杂的图像处理应用程序,其中一个子模块需要将巨大的二进制位图加载到内存中。实际上多达96GB(即888888x888888像素图像)。磁盘是2xSSDraid0,读/写速度约为1GB/s。它将图像加载到一个vector(每个元素代表位图中的一行)到带有字节的vector(每个元素代表8个像素)的智能指针。这里奇怪的问题是vector重复加载和清空后(我看到内存确实是填满清空,没有内存泄漏),每次迭代的时间好像越来越长。专门清理内存需要很长时间。测试我做了一些简单的测试应用程序来测试这个孤立的和从不同角度。用原始指针替换智能指针给出了同样的奇怪行为。然后我尝试使用nati

c++ - 如何使用 C++ 在 Windows 中列出子目录?

如何使用C++在Windows中列出子目录?使用可以跨平台运行的代码更好。 最佳答案 这是我针对该问题的解决方案,不过它是一个仅限Windows的解决方案。我想使用跨平台解决方案,但不使用boost。#include#include#include///Getsalistofsubdirectoriesunderaspecifiedpath///@param[out]outputEmptyvectortobefilledwithresult///@param[in]pathInputpath,maybearelativepathfr

c++ - 有没有办法在 Windows 的 basic_iostream 上获得非锁定流插入/提取?

我是一名C++开发人员,主要在Solaris和Linux上编程,直到最近,当我被迫创建一个针对Windows的应用程序时。我一直在使用基于TCP套接字支持的C++I/O流的通信设计。该设计基于单个线程从流中连续读取(大部分时间阻塞在套接字读取等待数据),而其他线程通过同一流发送(通过互斥锁同步)。当移动到Windows时,我选择使用boost::asio::ip::tcp::iostream来实现套接字流。我很沮丧地发现,上面的多线程设计导致了Windows上的死锁。看来operator,std::basic_string)声明一个“哨兵”,它为输入和输出操作锁定整个流。由于我的读取线

c++ - Windows 7:超越 C++ std::this_thread::sleep_for

我们的代码是用C++11(VS2012/Win7-64位)编写的。C++库提供了我们使用的sleep_for函数。我们观察到C++sleep_for有时会出现较大的超调。换句话说,我们要求sleep15毫秒,但sleep结果是例如100毫秒。当系统负载很高时,我们会看到这一点。我的第一react是:“当然,如果系统负载很大并且其他线程正在使用CPU,那么sleep当然会“花更长的时间””。然而,“有趣”的是,如果我们将sleep_for替换为WindowsAPI“Sleep”调用,那么我们将看不到这种行为。我还看到水下的sleep_for函数调用了WindowAPISleep方法。sl

c++ - std::get_time - 如何检查解析错误

我正在使用以下代码将字符串流解析为tm结构:std::tmtm;std::stringstreamss("Jan9201412:35:34");ss>>std::get_time(&tm,"%b%d%Y%H:%M:%S");我有兴趣检查是否发生解析错误(无效输入)。看起来这个函数并没有抛出异常。在文档中没有找到有用的信息:http://en.cppreference.com/w/cpp/io/manip/get_time听起来像是检查“goodbit”可能是方向,但我不确定该怎么做。(我使用的是VS2013编译器) 最佳答案 一如既

听GPT 讲Rust源代码--library/std(15)

题图来自AnIn-DepthComparisonofRustandC++[1]File:rust/library/std/src/os/wasi/io/fd.rs文件路径:rust/library/std/src/os/wasi/io/fd.rs该文件的作用是实现与文件描述符(FileDescriptor)相关的操作,具体包括打开文件、读写文件、修改文件状态等功能。以下是该文件的详细内容介绍:引用use crate::io::{self, Initializer, IoSlice, IoSliceMut};use crate::mem;use crate::ptr;use crate::sys

c++ - Windows 上的 std::basic_string<TCHAR> 会优于 std::wstring 吗?

据我了解,Windows#definesTCHAR是基于构建的应用程序的正确字符类型-所以它是wchar_t在UNICODE构建和char否则。因此我想知道是否std::basic_string会比std::wstring更可取,因为第一个理论上会匹配应用程序的字符类型,而第二个总是很宽。所以我的问题本质上是:会std::basic_string优于std::wstring在Windows上?而且,使用std::basic_string会有什么注意事项(即意外行为或副作用)吗??或者,我应该只使用std::wstring在Windows上而忘记它? 最佳答案

C++ 中的原子变量(std::atomic)使用指南

目录C++中的原子变量(std::atomic)使用指南基本概念使用方法创建原子变量读取值修改值原子操作常见应用场景1.计数器2.控制标志3.链表和数据结构示例代码结论C++中的原子变量(std::atomic)使用指南原子变量(std::atomic)是C++中用于多线程编程的强大工具之一。它们提供了一种线程安全的方式来访问和修改共享数据,而无需使用显式的互斥锁。本文将介绍std::atomic的基本概念、使用方法、常见应用场景以及示例代码,适合入门级读者。基本概念原子变量是一种特殊的数据类型,用于执行原子操作。原子操作是不可分割的操作,可以确保在多线程环境中线程安全地执行。C++中的std