硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3264|回复: 3
收起左侧

[ThreadX全家桶] 请教下,关于内存对齐的方法使用哪种比较好 ???

[复制链接]

681

主题

3489

回帖

5557

积分

论坛元老

积分
5557
发表于 2021-8-16 15:28:56 | 显示全部楼层 |阅读模式
请教下,关于内存对齐的方法使用哪种比较好 ???

#define  HY_ALIGN_TYPE   unsigned long
U32 MemSize


--------------------------------------------------------------------------------------------------------------------------------------------------------------
1.

        MemSize = (U32)(((MemSize + (sizeof(HY_ALIGN_TYPE))) - ((HY_ALIGN_TYPE) 1)) / (sizeof(HY_ALIGN_TYPE))) * (sizeof(HY_ALIGN_TYPE));
--------------------------------------------------------------------------------------------------------------------------------------------------------------

2.

  while((U32 MemSize % (sizeof(HY_ALIGN_TYPE   )) != 0)
     MemSize ++;

--------------------------------------------------------------------------------------------------------------------------------------------------------------

请教下,上面的 方法 1 与 2 哪种比较好哇 ???




回复

使用道具 举报

0

主题

274

回帖

274

积分

高级会员

积分
274
发表于 2021-8-16 17:42:49 | 显示全部楼层
__attribute__((aligned(n)))
回复

使用道具 举报

2

主题

23

回帖

29

积分

新手上路

积分
29
发表于 2021-8-16 18:16:42 | 显示全部楼层
优化问题看汇编即可 ,gcc下明显1 更好
  1. void fun1(unsigned int MemSize)
  2. {
  3.     MemSize = (unsigned int)(((MemSize + (sizeof(HY_ALIGN_TYPE))) - ((HY_ALIGN_TYPE) 1)) / (sizeof(HY_ALIGN_TYPE))) * (sizeof(HY_ALIGN_TYPE));
  4.     printf("%d", MemSize);
  5. }

  6.       
  7. void fun2(unsigned int MemSize)
  8. {
  9.    
  10.     while(( MemSize % (sizeof(HY_ALIGN_TYPE)) != 0))
  11.         MemSize ++;
  12.     printf("%d", MemSize);
  13. }
复制代码

O2优化结果
  1. fun1:
  2.         @ Function supports interworking.
  3.         @ args = 0, pretend = 0, frame = 0
  4.         @ frame_needed = 0, uses_anonymous_args = 0
  5.         push        {r4, lr}
  6.         add        r1, r0, #3
  7.         bic        r1, r1, #3
  8.         ldr        r0, .L4
  9.         bl        printf
  10.         pop        {r4, lr}
  11.         bx        lr
  12. .L5:
  13.         .align        2
  14. .L4:
  15.         .word        .LC0
  16.         .size        fun1, .-fun1
  17.         .align        2
  18.         .global        fun2
  19.         .syntax unified
  20.         .arm
  21.         .fpu softvfp
  22.         .type        fun2, %function
  23. fun2:
  24.         @ Function supports interworking.
  25.         @ args = 0, pretend = 0, frame = 0
  26.         @ frame_needed = 0, uses_anonymous_args = 0
  27.         tst        r0, #3
  28.         push        {r4, lr}
  29.         mov        r1, r0
  30.         beq        .L7
  31. .L8:
  32.         add        r1, r1, #1
  33.         tst        r1, #3
  34.         bne        .L8
  35. .L7:
  36.         ldr        r0, .L14
  37.         bl        printf
  38.         pop        {r4, lr}
  39.         bx        lr
  40. .L15:
  41.         .align        2
  42. .L14:
  43.         .word        .LC0
  44.         .size        fun2, .-fun2
  45.         .section        .rodata.str1.4,"aMS",%progbits,1
  46.         .align        2
  47. .LC0:
  48.         .ascii        "%d\000"
  49.         .ident        "GCC: (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]"
复制代码
回复

使用道具 举报

681

主题

3489

回帖

5557

积分

论坛元老

积分
5557
 楼主| 发表于 2021-9-9 10:46:50 | 显示全部楼层
luguan1997 发表于 2021-8-16 18:16
优化问题看汇编即可 ,gcc下明显1 更好

O2优化结果

  多谢多谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-21 04:55 , Processed in 0.357123 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表