さて、私は構造が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]
コメントを追加