草庐IT

可移植

全部标签

c++ - 使用 C++11 的可移植定时代码的正确方法

我正在为具有低延迟要求的程序的一部分编写一些计时代码。查看std::chrono库中可用的内容,我发现编写可移植的计时代码有点困难。std::chrono::high_resolution_clockstd::chrono::steady_clockstd::chrono::system_clocksystem_clock没有用,因为它不稳定,剩下的两个时钟有问题。high_resolution_clock不一定在所有平台上都稳定。steady_clock不一定支持细粒度分辨率时间段(例如:纳秒)为了我的目的,拥有一个稳定的时钟是最重要的要求,我可以在微秒级的粒度上完成。我的问题是,如

c++ - 如何可移植地强制 NAN * 零在特定表达式中给出零而不分支?

(我觉得这应该是一个重复的问题,但我在搜索时找不到合适的搜索词。)一般来说,(安静的)NAN乘以零应该得到NAN——确实如此。但是,在我的代码的一个特定的性能关键部分,我希望零乘以任何为零。在C++中执行此操作的快速方法是什么? 最佳答案 doublemymult(doublea,doubleb){doubleresult[]={a*b,0.};returnresult[(a==0.)|(b==0.)];}应该避免分支:仔细检查生成的程序集。并非所有的bool计算都暗示一个分支。 关于c

C++ 标准库可移植性

我从事大规模、多平台、实时网络应用程序的工作。我从事的项目通常没有真正使用容器或标准库,没有智能指针或任何“现代”C++语言功能。许多原始动态分配的数组很常见。我非常想开始使用标准库和一些C++11规范,但是,也有很多人反对我的项目,因为“STL/C++11不像便携,我们冒着使用它的风险”。我们确实在各种嵌入式系统以及成熟的Ubuntu/Windows/MacOS系统上运行软件。所以,对于我的问题;与标准库和C++11有关的可移植性的实际问题是什么?这只是让g++超过某个版本的情况吗?是否有一些平台不支持?是否需要已编译的库?如果需要,它们是否难以获取/编译?有没有人遇到过被不可移植的

c++ - unsigned long long vs unsigned long(可移植性的观点)

我希望能够在我的项目中使用大的正整数(8字节),即使sizeof(unsignedlong)在我的系统中产生8,我读到在大多数系统中unsignedlong只有4个字节,我决定试一试unsignedlonglong,因为它保证至少有8个字节。虽然我使用它的次数越多,我发现它也不是super可移植的,例如在某些系统中(取决于编译器)printf使用%llu格式化它,在某些系统中它使用%lld格式化它。我的代码只能在64位debian机器上运行,其中unsignedlong为8个字节。便携性不是大问题。在这种情况下,使用unsignedlonglong而不是unsignedlong是否有点

c++ - Qt4 应用程序中 "fork()"的可移植方式?

比如说,我需要运行一堆容易崩溃的代码,所以我需要在不同的进程上运行它。通常我会这样做:pid=fork();if(pid==-1){std::cout显然,我可以在我的Qt4应用程序中使用fork,但我想知道我是否可以使用Qt4提供的任何东西或任何可移植的方式来归档相同的功能,而无需求助于一堆架构#ifdefs?无论如何,我的目标是让这个应用程序只有pthread实现,但我仍然希望尽可能接近“原生”QtAPI。我已经测试了QThread,线程中的段错误显然会使整个应用程序崩溃,并且似乎QProcess仅针对生成完全不同的可执行文件时使用。还有其他选择吗? 最

c++ - 将 float 序列化为 32 位整数的可移植方法

我一直在努力寻找一种可移植的方法来序列化C和C++中的32位浮点变量,以便发送到微Controller或从微Controller发送。我希望格式定义得足够好,以便序列化/反序列化也可以从其他语言完成,而不需要太多努力。相关问题是:Portabilityofbinaryserializationofdouble/floattypeinC++SerializedoubleandfloatwithCc++portableconversionoflongtodouble我知道在大多数情况下typecastunion/memcpy会工作得很好,因为float表示是相同的,但我更愿意有更多的控制和

c++ - 按位运算。此代码安全且可移植吗?

我需要计算表示为char数组的位集之间的汉明距离。这是一个核心操作,所以它必须尽可能快。我有这样的东西:constintN=32;//32always//returnsthenumberofbitsthatareonesinacharintcountOnes_uchar8(unsignedcharv);//paandpbpointtoarraysofNitemsinthamming(constunsignedchar*pa,constunsignedchar*pb){intret=0;for(inti=0;i分析后,我注意到对int的操作速度更快,所以我写道:constintN=32;

c++ - 将 VC++ 的 __try/__except EXCEPTION_STACK_OVERFLOW 移植到 MinGW

我正在尝试使用VC++的try-except语句将一些代码移植到MinGW:boolsuccess=true;__try{//...}__except((EXCEPTION_STACK_OVERFLOW==GetExceptionCode())?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH){success=false;_resetstkoflw();}returnsuccess;是否可以使用MinGWg++编写捕获堆栈溢出异常的代码? 最佳答案 您需要手动调用注册异常处理的

c++ - 将 getifaddrs 移植到 Win XP

我正在尝试将MacOSX应用程序移植到Windows,但遇到了有关getifaddrs的问题。基本上windows不支持。我正在尝试找到一种重新实现它的方法(对于AF_INET和AF_INET6),但Windows上的“等效”功能似乎与MacOSX支持完全不同。有人做过这种转换吗?如果是的话,有没有一种好方法可以让Windows像MacOSX那样向我报告界面信息? 最佳答案 Windows上最接近的函数是GetAdaptersInfo和GetAdaptersAddresses.MSDN文档非常全面,因此您应该可以找到所需的一切。

c++ - Visual Studio 2010 中是否有编译器设置以确保可移植C++ 的编写?

我从使用VisualStudio2010进行编译的开发人员那里收到C++源代码,然后我需要在各种不同的编译器下重新编译:GCC、LLVM、其他版本的VisualStudio等。有时他发送给我的代码(在VS2010中编译时没有警告)在其他编译器下编译失败。是否有任何他可以在VS2010中设置的编译器设置来增加他的代码干净可移植的可能性? 最佳答案 在语言层面,没有Elixir。您能做的最好的事情就是尽可能地遵守语言标准。如果您利用特定于特定编译器的扩展,大多数编译器都可以选择发出警告或错误(对于VisualC++,/Za将禁用非标准语