ロゼッタONでコンパイルしたものが、arm64でも動くのはなぜですか？


やったこと（ロゼッタONで、コンパイル。arm64で実行）：

[code]

    $ uname -m       
    x86_64
    $ gcc hoge.c
    $ ./a.out 
    こんにちは!
    $ file ./a.out 
    ./a.out: Mach-O 64-bit executable x86_64
    $ arch -arm64 zsh
    Restored session: Wed Oct 11 09:00:29 JST 2023
    $ uname -m    
    arm64
    $ ./a.out 
    こんにちは!
    
[/code]

x86_64用にコンパイルしたものが arm64で動いています。  
なぜなのでしょうか？ どういうときに動かなくなるのでしょうか？

hoge.cの中身は下記です。

[code]

    #include <stdio.h>
    
    int main(void){
      printf("こんにちは!\n");
      return 0;
    }
    
[/code]

* * *

くどくなるので、詳細は載せませんが、逆の場合も同様で、arm64でコンパイルしたものが、x86_64で動いていました。

