On Sat, 2022-09-24 at 18:24 +0000, Bob Plantz via Gcc-help wrote: > On 64-bit Raspberry Pi OS, gcc aligns strings in the .rodata section > on 64-bit boundaries: > > .text > .section .rodata > .align 3 > .LC0: > .string "Enter a number: " > .align 3 > .LC1: > .string "%i" > .align 3 > .LC2: > .string "Result: %i\n" > .text > .align 2 > .global main > .type main, %function > main: > > I understand the 32-bit boundary for the .text (32-bit instructions), > but the element in a string is a byte. Arm documentation says that > array addresses should be aligned at the element size. Why align the > first character at a 64-bit boundary? Does this have to do with cache > alignment? In gcc/config/aarch64/aarch64.h:110: /* Align definitions of arrays, unions and structures so that initializations and copies can be made more efficient. This is not ABI-changing, so it only affects places where we can see the definition. Increasing the alignment tends to introduce padding, so don't do this when optimizing for size/conserving stack space. */ If you use -Os, ".align 2" won't show up. -- Xi Ruoyao <xry111@xxxxxxxxxxx> School of Aerospace Science and Technology, Xidian University