草庐IT

builtin_offsetof

全部标签

c++ - 为什么 __builtin_prefetch 在这里没有任何作用?

我正在编写一个程序来解析文件。它由一个逐个字符解析并处理它们的主循环组成。这是主循环:charc;char*ptr;for(size_ti=0;i(sentenceMap)+i);c=*ptr;__builtin_prefetch(ptr+i+1);//sometreatmentonptrandc}如您所见,我添加了一条builtin_prefetch指令,希望在我的循环的下一次迭代中放入缓存。我尝试了不同的值:ptr+i+1、ptr+i+2、ptr+i+10,但似乎没有任何变化。为了衡量性能,我使用了valgrind的工具cachegrind,它可以指示缓存未命中数。在c=*ptr行

c++ - __builtin_offsetof 运算符的用途和返回类型是什么?

C++中__builtin_offsetof运算符(或Symbian中的_FOFF运算符)的用途是什么?此外它还返回什么?指针?字节数? 最佳答案 它是GCC编译器提供的内置函数,用于实现C和C++标准指定的offsetof宏:GCC-offsetof它返回POD结构/union成员所在的偏移量(以字节为单位)。示例:structabc1{inta,b,c;};unionabc2{inta,b,c;};structabc3{abc3(){}inta,b,c;};//non-PODunionabc4{abc4(){}inta,b,c;

c++ - __builtin_round 不是常量表达式

在G++中,各种内置数学函数在某些条件下是constexpr。例如,以下编译:staticconstexprdoubleA=__builtin_sqrt(16.0);staticconstexprdoubleB=__builtin_pow(A,2.0);虽然它们并不总是constexpr,这取决于参数。例如,__builtin_sqrt(NAN)在用作常量表达式时会导致编译错误。但我遇到了一个奇怪的情况,在我看来它应该是constexpr,但它不是:staticconstexprdoublevalue(){return1.23;}staticconstexprdoubleresult=

c++ - C/C++ 中 offsetof 宏的合法使用

有这个宏offsetof在C/C++中,它允许您获取POD结构中成员的地址偏移量。来自CFAQ的示例:structfoo{inta;intb;};structfoo;/*Setthebmemberoffooindirectly*/*(int*)((char*)foo+offsetof(b))=0xDEADBEEF;现在这对我来说似乎很邪恶,我看不到这个宏的许多合法用途。我见过的一个合法示例是它在container_of中的使用Linux内核中用于获取嵌入式结构父对象地址的宏:/*gettheaddressofthecmosdevicestructinwhichthecdevstruct

c++ - 为非 POD 类型寻找类似于 offsetof() 的东西

我正在寻找一种方法来获取非POD性质的C++类的数据成员的偏移量。原因如下:我想将数据存储在HDF5中格式,这似乎最适合我的Material(数值模拟输出),但它可能是一个相当面向C的库。我想通过C++接口(interface)使用它,这需要我像这样声明存储类型(遵循here和here的文档(第4.3.2.1.1节)):classexample{public:doublemember_a;intmember_b;}//classexampleH5::CompTypefunc_that_creates_example_CompType(){H5::CompTypect;ct.insert

C++ offsetof char* 算法

在thisanswer,int8_t*用于(字节)指针运算:std::size_toffset=offsetof(Thing,b);Thing*thing=reinterpret_cast(reinterpret_cast(ptr)-offset);我过去一直使用char*但评论真的很困惑,没有人回应,所以我发布了这个单独的问题。char*是否有效,以及进行这些计算的首选方式? 最佳答案 您必须使用char*:在指针上使用reinterpret_cast和int8_t*时的行为不是int8_t的东西是undefined。转换为cha

gradle - 什么是 .kotlin_builtins 文件,我可以从我的 uberjars 中省略它们吗?

我正在为一个用Kotlin编写的应用程序将proguard集成到我的gradle构建中。我发现proguard正在剥离Kotlin标准库(在我的简单HelloWorld程序中应该如此),但它在我的jar中留下了一堆文件扩展名为.kotlin_builtins的文件。当我配置我的gradle任务以排除这些文件时,该程序似乎仍然可以正常工作。这些文件是什么,它们必须与我的可执行uberjar一起提供吗?这是我的build.gradle文件的内容供引用:buildscript{ext.kotlin_version='1.0.5'ext.shadow_version='1.2.4'reposi

gradle - 什么是 .kotlin_builtins 文件,我可以从我的 uberjars 中省略它们吗?

我正在为一个用Kotlin编写的应用程序将proguard集成到我的gradle构建中。我发现proguard正在剥离Kotlin标准库(在我的简单HelloWorld程序中应该如此),但它在我的jar中留下了一堆文件扩展名为.kotlin_builtins的文件。当我配置我的gradle任务以排除这些文件时,该程序似乎仍然可以正常工作。这些文件是什么,它们必须与我的可执行uberjar一起提供吗?这是我的build.gradle文件的内容供引用:buildscript{ext.kotlin_version='1.0.5'ext.shadow_version='1.2.4'reposi

ios - Xcode 使用的 "builtin-copy"是什么/在哪里?

如果我查看iOS应用程序构建的详细信息,在复制资源阶段,我看到Xcode声称使用了称为“内置复制”的东西:CpResource/svn/MyProject/MyResources/myLog.json/Users/benjamin.flynn/Library/Developer/Xcode/DerivedData/MyApp-gocyhvchxrohmbbgmgbzzxtztbku/Build/Products/Debug-iphoneos/MyApp.app/myLog.jsoncd"/svn/MyProject/MyApp"setenvPATH"/Applications/Xcod

swift - C 中的 offsetof(struct, member) 在 Swift 中的等价物是什么?

这是Swift中的一个结构体:structA{varxvaryvarz}我应该怎么做才能得到结构A中y的偏移量,就像C中的offsetof(A,y)一样?谢谢:) 最佳答案 MemoryLayout.offset(of:)是在Swift4.2中添加的,实现了SE-0210Addanoffset(of:)methodtoMemoryLayout例子:structA{varx:Int8vary:Int16varz:Int64}MemoryLayout.offset(of:\A.x)//0MemoryLayout.offset(of:\A