構造はCで内部的にどのように機能しますか?ある構造から別の構造へのデータコピーはどのように作成されますか?

ゆりアルバカーキ

さて、私は構造がCでどのように機能するかを知っていますが、内部でどのように機能するかはわかりません。まだアセンブリを学習しているので、私は最初です、まあ、私の質問は、以下のコードにありますPと呼ばれる構造体から2つの変数を作成します。AとBと呼ばれるこの構造体から、AをBに割り当てた後、B = Aであるため、ポインターを使用しなくても、Aからデータを取得できます。 AからBまで作った?

#include <stdio.h>

struct P{
    int x;
    int y;
}A, B;

int main(void) {
   printf("%p\n%p\n\n", &A, &B);
   printf("Member x of a: %p\nMember y of a: %p\n", &A.x, &A.y);
   printf("Member x of b: %p\nMember y of b: %p\n", &B.x, &B.y);  
   A.x = 10;
   A.y = 15;
   B = A; // 10 
   printf("%d\n%d\n", B.x, B.y);
   return 0;
}
スティーブサミット

サンプルコードで興味深いのは、次の行だと思います。

B = A;

通常、コンパイラはこれを2つの方法のいずれかで実装します。

(1)メンバーを個別にコピーし、あなたが言ったのとほぼ同じ効果を与えます

B.x = A.x;
B.y = A.y;

(2)低レベルのバイトコピーループ(またはマシン命令)を発行し、次のような効果をもたらします。

memcpy(&B, &A, sizeof(struct P));

(通常、これはインラインで行われ、実際の関数呼び出しは含まれません)。

コンパイラーは、どちらが小さいか(コードの出力が少ない)、どちらがより効率的か、またはコンパイラーが最適化しようとしているものに基づいて、これらのいずれかを選択します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ