18

restrict次のようなキーワードを使用して:

int f(int* restrict a, int* restrict b);

配列 a と b が重複しないようにコンパイラに指示できます。私は構造を持っているとしましょう:

struct s{
(...)
int* ip;
};

struct s2 つのオブジェクトを取る関数を作成します。

int f2(struct s a, struct s b);

a.ipこの場合、とb.ipが重複しないようにコンパイラに同様に指示するにはどうすればよいですか?

4

2 に答える 2

16

restrict構造体の内部でも使用できます。

struct s {
    /* ... */
    int * restrict ip;
};

int f2(struct s a, struct s b)
{
    /* ... */
}

したがって、コンパイラは、関数が呼び出されるたびに、 と が互いに素なオ​​ブジェクトを参照するために使用されているa.ipと想定できます。b.ipf2

于 2012-11-09T11:27:58.153 に答える
-2

このポインターの例を確認してください。助けが得られるかもしれません。

// xa and xb pointers cannot overlap ie. point to same memmpry location.
void function (restrict int *xa, restrict int *xb)
{
    int temp = *xa;
    *xa = *xb;
    xb = temp;
}

2 つのポインターが restrict として宣言されている場合、これら 2 つのポインターはオーバーラップしません。

編集済み

他の例については、このリンクを確認してください

于 2012-11-09T11:29:51.993 に答える