gcc的一些 __attribute__

news/2024/7/7 15:53:06 标签: gcc, 编译器, struct, function, windows, 优化
GNU C的一大特色就是__attribute__机制。__attribute__可以 设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

__attribute__书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的__attribute__参数。

__attribute__语法格式为:

__attribute__ ((attribute-list))

其位置约束:放于声明的尾部“;”之前。

函数属性(Function Attribute):函数属性可以 帮助 开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。__attribute__机制也很容易同非GNU 应用 程序做到兼容之功效。

GNU CC需要使用 –Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。


__attribute__ ((packed)) 的作用:


__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关, gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:

在TC下:struct my{ char ch; int a;} sizeof(int)=2;sizeof(my)=3;(紧凑模式)

在GCC下:struct my{ char ch; int a;} sizeof(int)=4;sizeof(my)=8;(非紧凑模式)

在GCC下:struct my{ char ch; int a;}__attrubte__ ((packed)) sizeof(int)=4;sizeof(my)=5





http://www.niftyadmin.cn/n/1402592.html

相关文章

cancelAnimationFrame失效问题

在调试threejs时为了让模型自动旋转 使用了requestAnimationFrame方法(官网文档),但是在使用cancelAnimationFrame取消时出现了问题。requestAnimationFrame无法取消掉。 loadingModel() {const manager = new THREE.LoadingManager();// add handler for TGA texturesmana…

Linux 2.6版内核中通过模块获取sys_call_table地址的方法

本文主要介绍在Linux 2.6版的内核中实现基地址修改的方法。所有代码我都在基于2.6.19版内核的Fedora Core 6上进行了测试。 Linux 2.6版的内核出于安全的考虑没有将系统调用列表基地址的符号sys_call_table导出,但要对系统调用进行替换,却必须要获取该地…

基于内核的linux键盘纪录器

1 - 介绍 2 - linux的keyboard驱动是如何工作的 3 - 基于内核的键盘纪录的原理 3.1 - 中断句柄 3.2 - 函数劫持 3.2.1 - 劫持handle_scancode 3.2.2 - 劫持put_queue 3.2.3 - 劫持receive_buf 3.2.4 - 劫持tty_read 3.2.5 - 劫持sys_…

libnet、libnids、libpcap轻松搭建Linux网络入侵检测系统

libnet-1.1.2.1.tar.gz libpcap-1.2.1.tar.gz libnids-1.24.tar.gz 这里的安装是有顺序的,nids的安装需要pcap和net,所以安装nids前需要先装pcap和net。 pcap和net没有相互依赖,所以它们顺序无关。 1、安装net tar zxvf libnet-1.1.2.1…

内核构造skb数据包的实现总结

http://blog.csdn.net/macrossdzh/article/details/5438306 http://blog.chinaunix.net/space.php?uid20779306&doblog&id184570 http://bbs.chinaunix.net/thread-1941060-1-1.html http://bbs.routerclub.com/home.php?modspace&uid681&doblog&id…

图说adore-ng之进程隐藏

http://blog.csdn.net/sealyao/article/details/4667210

Rootkit技术的主要原理

rootkit的主要分类:应用级->内核级->硬件级早期的rootkit主要为应用级rootkit,应用级rootkit主要通过替换login、ps、ls、netstat等系统工具,或修改.rhosts等系统配置文件等实现隐藏及后门;硬件级rootkit主要指bios rootkit…