函数地址对齐 __attribute__((aligned(64))) 编译器选项 -falign-functions=4

1, 实验原料 源代码

hello.c

#include <stdio.h>

#define  ALI // __attribute__((aligned(64)))

float ALI  adddd(float a, float b, float c, float d){

	a+=b;
	a+=c;
	a+=d;

	return a;
}

float ALI  subbbb(float a, float b, float c, float d)
{
	a-= b;
	a-=c;
	a-=d;

	return a;
}


int main ()
{
	float x,y,z,s;

	x = 77.777;
	y =  1.111;
	z =  2.222;
	s =  3.333;

	printf("sum = %7.3f\n", adddd(x,y,z,s));
	printf("sub = %7.3f\n", subbbb(x,y,z,s));

	return 0;
}

2, no align 要求

#define ALI // attribute((aligned(64)))

ALI 定义为空,相当于不存在;

gcc hello.c

./a.out

objdump -d ./a.out

运气比较好,adddd函数的指令首地址为 0000001149

3,16字节 align

下面分别变成

#define ALI attribute((aligned(16)))

#define ALI attribute((aligned(64)))

来试试效果:

#define ALI attribute((aligned(16)))

效果同预期,adddd 的首指令地址变成了 00000001150,是可以整除16的

#define ALI attribute((aligned(64)))

4, 使用 -falign-functions=N

gcc -falign-functions=1 hello_align.c -o a.16.out

gcc -falign-functions=2 hello_align.c -o a.16.out

gcc -falign-functions=4 hello_align.c -o a.16.out

16:

可以看出来,函数体指令首地址都满足对齐要求。

相关推荐
q567315234 分钟前
Python 中的字符串匹配算法
android·java·javascript·python·算法
C++忠实粉丝34 分钟前
Linux系统基础-多线程超详细讲解(5)_单例模式与线程池
linux·运维·服务器·c++·算法·单例模式·职场和发展
2401_8771587339 分钟前
什么是垃圾回收(Garbage Collection)?
java·开发语言·算法
阿亨仔42 分钟前
Pytorch猴痘病识别
人工智能·pytorch·python·深度学习·算法·机器学习
混迹网络的权某1 小时前
蓝桥杯真题——三角回文数(C语言)
c语言·开发语言·算法·蓝桥杯·改行学it
混迹网络的权某2 小时前
蓝桥杯真题——乐乐的序列和(C语言)
c语言·算法·蓝桥杯
wheeldown2 小时前
【数据结构】快速排序
c语言·数据结构·算法·排序算法
passer__jw7672 小时前
【LeetCode】【算法】739. 每日温度
算法·leetcode
aqua35357423582 小时前
杨辉三角——c语言
java·c语言·数据结构·算法·蓝桥杯
Aurora_th2 小时前
蓝桥杯 Python组-神奇闹钟(datetime库)
python·算法·职场和发展·蓝桥杯·datetime