函数地址对齐 __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:

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

相关推荐
彦为君6 分钟前
算法思维与经典智力题
java·前端·redis·算法
智能优化与强化学习16 分钟前
Gym(Gymnasium)仿真环境详解(二):环境简介、入门算法、调参要点、核心挑战
算法·强化学习·gym·零基础入门·算法评估
mxwin28 分钟前
Unity Shader exp 函数的算法与渲染应用
算法·unity·游戏引擎·shader
“码”力全开35 分钟前
AI视频分析误报优化完整流程
算法·架构·边缘计算
深盾科技_Virbox37 分钟前
深盾科技·Virbox产品体系全景解读:软件安全如何从加密锁走向全生命周期
java·大数据·算法·安全·软件需求
可编程芯片开发1 小时前
基于VSG虚拟同步发电机控制的三相并网逆变器带多组可变负载Simulink建模与仿真
算法
AI服务老曹1 小时前
国产NPU视觉算法参数配置说明
算法·性能优化·边缘计算
彦为君1 小时前
Redis最新版本特性
java·数据库·redis·算法·bootstrap
触底反弹2 小时前
🔥 字符串算法面试三连击:反转、回文、回文变种,搞懂这三题稳了!
前端·javascript·算法
aaaameliaaa2 小时前
计算斐波那契数(递归、迭代)(1,1,2,3,5.....)
c语言·开发语言·笔记·算法·排序算法