当前位置: 首页 > news >正文

福建省城乡和建设厅网站网站建设广金手指六六十四

福建省城乡和建设厅网站,网站建设广金手指六六十四,网站建设的意思,国内外贸平台有哪些目录 一、section 二、aligned 三、packed 四、format 五、weak 六、alias 七、noinline和always_inline GNU C增加了一个__attribute__关键字用来声明一个函数、变量或类型的特殊属性#xff0c;可以知道编译器在编译过程中进行特定方面的优化或代码检查。 目前…目录 一、section 二、aligned 三、packed 四、format 五、weak 六、alias 七、noinline和always_inline GNU C增加了一个__attribute__关键字用来声明一个函数、变量或类型的特殊属性可以知道编译器在编译过程中进行特定方面的优化或代码检查。 目前__attribute__属性支持十几种属性声明 section、aligned、packed、format、weak....... 一、section section属性的作用是在程序编译时将一个函数或变量放到指定的段即section中。 一个可执行文件主要由代码段、数据段、BSS段构成。除了这三个段之外可执行文件还包含其他一些段如只读数据段符号表等。在Linux系统中可以使用readelf -S命令查看一个可执行文件的各个端信息包括大小、起始地址等。 一般默认规则为 section组成代码段(.text)函数定义、程序语句数据段(.data)初始化的全局变量、初始化的静态局部变量BSS段(.bss)未初始化的全局变量、未初始化的静态局部变量使用举例 int val0 8; int val1 __attribute__((section(.data))); int main(void) {return 0; } 此时我们用readelf查看可以发现val1放在了数据段中。 二、aligned aligned和packed是用来显式指定一个变量的存储对齐方式。aligned一般用来增大变量的地址对齐。 C语言中各种基本数据类型要按照自然边界对齐一个char型的变量按照1字节对齐一个short行的整型变量按照sizeof(short int)2字节对齐一个int型的整型变量要按sizeof(int)4字节对齐。 C语言中不仅基本数据类型要按照自然边界对齐复合数据类型也要按照各自的对其原则对齐。 结构体对齐原则如下 结构体内各成员按照各自数据类型的对齐模数对齐。结构体整体对齐方式按照最大成员的size或其size的整数倍对齐。 联合体对齐原则如下 联合体的整体大小最大成员对齐模数或对齐模数的整数倍。联合体的对齐原则按照最大成员的对齐模数对齐。 如果你想定义一个变量在内存中以8字节地址对齐就可以如下 int a __attribute__((aligned(8))); 更甚我们可以显式指定结构体内某个成员的地址对齐也可以显示指定整个结构体的对齐方式。如 struct data {char a;short b __attribute__((aligned(4)));int c; }struct data {char a;short b;int c; }__attribute__((aligned(16))); 需要注意的是编译器对每个基本数据类型都有默认的最大边界对齐字节数如果超过了编译器只能按照它规定的最大对齐字节数给变量分配地址。 总结通过aligned属性声明可以显示的指定变量的对齐方式简化CPU和内存RAM之间的接口和硬件设计但是也会因为边界对齐造成一定的内存空洞浪费内存资源。 三、packed aligned和packed是用来显式指定一个变量的存储对齐方式。packed一般用来减少变量的地址对齐。指定变量或类型使用最可能小的地址对齐方式。 如 struct data {char a;short b __attribute__((packed));int c __attribute__((packed)); }struct data {char a;short b;int c; }__attribute__((packed)); 这两种方式结构体大小都为7。对整个结构体添加packed属性和分别对每个成员添加packed属性是一样的。 在内核源码中我们经常看到aligned和packed一起使用这样既避免了结构体内各成员因地址对齐产生内存空洞又指定了整个结构体的对齐方式。 struct data {char a;short b;int c; }__attribute__((packed,aligned(8))); 这个结构体大小为8。 四、format format属性可以指定变参函数的参数格式检查。 例如我们实现一个自己的打印函数为了确保传入参数的格式正确性可以添加该属性。如 #include stdio.h #include stdarg.h /*va_list定义在编译器头文件stdarg.h中。va_start(fmt, args)根据参数args的地址获取args后面参数的地址并保存在fmt指针变量中va_end(args)释放args指针将其赋值为NULL */void __attribute__((format(printf,1,2))) my_printf(char a, ...) {va_list args;va_start(args, a);vprintf(a, args);va_end(args); }int main(void) {int num 0;my_printf(hello world!\n, num);return 0; }五、weak weak属性可以将一个强符号转换为弱符号。 使用方法如下 void __attribute__((weak)) func(void); int num __attribute__(weak); 强符号函数名初始化的全局变量名。 弱符号未初始化的全局变量名。 使用举例 int a __attribute__((weak)) 1;void f(void) {printf(f:a %d\n, a); }int a 4;int main(void) {printf(main:a %d\n, a);f();return 0; } 程序运行结果如下 main:a 4 f:a 4 六、alias alias属性主要用来给函数定义一个别名。 void _f(void) {printf(_f\n); }void f() __attribute__((alias(_f)));int main(void) {f();return 0; } 程序运行结果如下 _f 通过alias属性声明我们给_f()函数定义了一个别名f()以后如果想要调用_f()函数则直接通过f()调用即可。 在Linux内核中我们会发现alias有时会和weak属性一起使用。特别是当有些函数随着内核版本升级函数接口发生了变化我们可以通过alias属性对这个旧的接口名字进行封装重新起一个接口名字。 //f.c void _f(void) {printf(_f()\n); }void f() __attribute__((weak, alias(_f)));//main.c void __attribute__((weak)) f(void); void f(void) {printf(f()\n); } int main(void) {f();return 0; } 如果我们在main.c中重新定义了f()函数那么当main()函数调用f()函数时会直接调用main.c中新定义的函数当f()函数没有被定义时则调用_f()函数。 七、noinline和always_inline 这两个属性的用途是告诉编译器在编译时对我们指定的函数内联展开或不展开。 使用方法为 static inline __attribute__((noinline)) int func(); static inline __attribute__((always_inline)) int func(); 使用inline声明的函数被称为内联函数内联函数一般会有一个static或extern修饰。使用inline声明一个内联函数和使用关键字register声明一个寄存器变量一样只是建议编译器在编译时内联展开。编译器会根据实际情况函数体大小、来做决定。使用register修饰一个变量时只是建议编译器在为变量分配存储空间时将这个变量放到寄存器里使程序的运行效率更高。编译器会根据寄存器资源是否紧张这个变量的类型及是否频繁使用来做权衡。 但是我们使用noinline和always_inline对一个内联函数做显式属性声明时编译器的编译行为就变得确定了使用noinline声明就是告诉编译器不要展开使用always_inline属性声明就是告诉编译器要内联展开。
http://www.w-s-a.com/news/404272/

相关文章:

  • 魔客吧是什麼程序做的网站代理厦门网站设计公司
  • 90设计手机站东营网站推广
  • 哪家购物网站建设好专门做水生植物销售网站
  • php医院网站开发兼职app开发网上app开发
  • 接任务做兼职的的网站衡阳手机网站设计
  • 徐州经济开发区网站佛山百度关键词seo外包
  • 肃宁网站建设有限责任公司法人承担什么责任
  • 珠海斗门建设局网站如何免费做网站
  • 自助外贸网站建设可直接打开网站的网页
  • 江苏城嘉建设工程有限公司网站潍坊网站定制公司
  • 四川省住房和城乡建设厅新网站宜昌建设厅网站
  • 建设网站一般流程建设开发网站
  • 设计外贸英文网站国家企业信息信用公信系统
  • 主题资源网站创建时 如何突出设计的特点阿里云是做网站的吗
  • 乌市建设工程质量监督站网站外资公司注册
  • 档案馆网站机房建设做游戏网站打鱼
  • 网站建设平台 创新模式搭建好ftp服务器 如何通过网站访问
  • 苏州集团网站制作设计网页制作软件ai
  • 网站建设新手教程视频教程手帐风格wordpress主题
  • 做投标网站条件网站更改指定字段
  • mvc5 网站开发之美做印刷网站公司
  • 医疗网站建设精英微信网站用什么制作的
  • 银川网站设计联系电话地推加人2元1个
  • 龙华网站 建设深圳信科北京知名的网站建设公司
  • 怎么做qq刷赞网站搜盘 资源网
  • 微网站怎么做的好名字吗陕西省医院网站建设管理
  • 泉州seo-泉州网站建设公司温州企业自助建站系统
  • 网站建设属于什么费网站建设网络推广
  • 德州网站开发人员网站怎么才能被百度收录
  • wordpress网站怎么加小游戏乐山网站制作公司