jjzjj

c++ - 如何使用#pragma 在 G++ 中启用优化

我想在没有命令行参数的情况下在g++中启用优化。我知道GCC可以通过在我的代码中编写#pragmaGCCoptimize(2)来做到这一点。但它似乎不适用于G++。此页面可能有帮助:http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html我的编译器版本:$g++--versiong++(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1$gcc--versiongcc(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1我写了一些这样的代码:#pragmaGCCoptim

c++ - 为什么英特尔编译器忽略英特尔 MIC 的非时间预取 pragma 指令?

Intel编译器在循环中生成以下预取指令,用于通过a_ptr指针访问数组:400e93:62d17808184c24vprefetch0[r12+0x80]如果我手动更改(通过十六进制编辑可执行文件)将其更改为非临时预取:400e93:62d17808184424vprefetchnta[r12+0x80]循环运行速度几乎快了1.5倍(!!!)。但是,我更希望编译器为我生成非时间预取。我以为#pragmaprefetcha_ptr:_MM_HINT_NTA循环前shoulddothetrick,但实际上并没有;它生成与没有pragma的指令完全相同的指令。为什么icpc会忽略这个pra

C语言之pragma用法详解

(0)前言C语言Pragma指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。希望对大家学习C语言有所帮助。其格式一般为:#PragmaPara其中Para为参数,下面来看一些常用的参数。(1)#Pragmamessage参数能够在编译信息输出窗口中输出相应的信息这对于源代码信息的控制是非常重要的。其使用方法为:Pragmamessage(“消息文本”)当我们在程序中定义了许多宏来控制源代码版本的

c++ - GCC pragma 在源文件中添加/删除编译器选项

我开发了一个跨平台的库,它充分利用了type-punning在套接字通信中。这个库已经在许多项目中使用,其中一些我可能不知道。不正确地使用这个库会导致危险的未定义行为。我想尽我所能确保正确使用此库。当然,除了文档,在G++下,我知道最好的方法是使用-fstrict_aliasing和-Wstrict-aliasing选项。在GCC下有没有办法在源文件级别应用这些选项?换句话说,我想写如下内容:MyFancyLib.h#ifndefMY_FANCY_LIB_H#defineMY_FANCY_LIB_H#pragma(somethingthatpushesthecurrentcompile

c++ - GCC 上的#pragma pack(push, n)/#pragma pack(pop) 和 __attribute__((__packed__, aligned(n) )) 之间有什么区别?

具体在GCC上(即用GCC编译两者),以下两者的工作方式有何不同?structfoo1{chara;intb;}__attribute__((__packed__,aligned(n)));和:#pragmapack(push,n)structfoo2{chara;intb;};#pragmapack(pop)他们appeartobehavedifferently:foo1f1;foo2f2;int&i1=f1.b;//okint&i2=f2.b;//cannotbindpackedfield'f2.foo2::b'to'int&'为什么一个有错误而另一个没有?至少内存布局是否相同?

c++ - "pragma pack 1"是否有助于避免堆碎片?

在我的程序中,我看到一些驻留大小增加了。我想这是因为堆碎片。所以我打算使用#pragmapack1。它会减少堆碎片吗?会不会有一些其他的开销?我去还是不去? 最佳答案 有一个经过充分证明的技术叫做Memorypools.它专为减少内存碎片和帮助解决内存泄漏而设计。并且应该在内存碎片成为程序功能瓶颈的情况下使用。'pragmapack1'无助于避免堆碎片。“pragmapack1”用于从结构中删除填充字节,以帮助在程序之间传输二进制结构。 关于c++-"pragmapack1"是否有助于避

windows - 库导入 : #pragma comment VS Visual studio project input

使用#pragmacomment(lib,"../../xxx.lib")使用VisualStudio项目选项两种方法的优缺点是什么?我正在寻找更便于管理许多项目的方法。微软推荐什么方法? 最佳答案 #pragmacomment的优点是您的库的用户不会忘记添加设置。或者添加错误的,在调试和发布构建以及/MD与/MT构建之间的差异时迷失方向的情况并不少见。一个缺点是在某些情况下很难解决链接器问题。在解决方案中,还有第三种方法在便利性方面难以超越。右键单击需要库的项目,然后单击项目依赖项。勾选图书馆项目。这确保库项目始终在项目和.lib

ios - 如何在swift中声明#pragma pack (1)

我正在尝试将iOS应用程序从objective-c重写为swift。我正在使用序列化来通过某种通信层发送数据。在objective-c中,我在每个结构的顶部使用了#pragmapack(1),以便使用顺序布局,而无需在数据成员之间进行填充。我试图在结构的顶部使用PRAGMA_STRUCT_PACK。它似乎在Playground上工作,但在我的应用程序中实现它时,我收到一条错误消息:“顶层不允许使用表达式”。 最佳答案 Swift不支持显式指定结构类型的数据布局。(至少,目前没有。Fileabug如果有你想看到的功能,也许Apple会

ios - #pragma mark 未列出第一个组名

我正在使用#pragmamark将我的方法分组到某些类别下。但问题出在Xcode4我的第一个类别没有显示。我的代码如下:@interfaceMyClass:NSObject#pragmamark-#pragmamarkCategory1//Somemethoddeclaration#pragmamark-#pragmamarkCategory2//Somemethoddeclaration#pragmamark-#pragmamarkCategory3//Somemethoddeclaration@end但是当我查看Xcode时,它只显示类别2和类别3。类别1没有列出,请检查图像我的代

ios - #pragma mark 未列出第一个组名

我正在使用#pragmamark将我的方法分组到某些类别下。但问题出在Xcode4我的第一个类别没有显示。我的代码如下:@interfaceMyClass:NSObject#pragmamark-#pragmamarkCategory1//Somemethoddeclaration#pragmamark-#pragmamarkCategory2//Somemethoddeclaration#pragmamark-#pragmamarkCategory3//Somemethoddeclaration@end但是当我查看Xcode时,它只显示类别2和类别3。类别1没有列出,请检查图像我的代