Was bedeutet „restrict“ in der Funktionssignatur?

Lesezeit: 1 Minute
int pthread_create(pthread_t *restrict thread,
              const pthread_attr_t *restrict attr,
              void *(*start_routine)(void*), void *restrict arg);

Ich würde gerne wissen, was die Bedeutung von beschränken ist?

  • Mögliches Duplikat von Realistic usage of the C99 ‘restrict’ keyword?

    – Ciro Santilli OurBigBook.com

    19. März 2017 um 11:34 Uhr

Es ist etwas, das in C99 eingeführt wurde und den Compiler wissen lässt, dass der dort übergebene Zeiger nicht auf dieselbe Stelle zeigt wie alle anderen Zeiger in den Argumenten. Wenn Sie dem Compiler diesen Hinweis geben, kann er aggressivere Optimierungen vornehmen, ohne den Code zu beschädigen.

Betrachten Sie als Beispiel diese Funktion:

int add(int *a, int *b) {
    return *a + *b;
}

Offensichtlich fügt es zwei Zahlen von Zeigern hinzu. Wir können es so verwenden, wenn wir wollen:

// includes excluded for brevity
int main(int argc, char **argv) {
    int number=4;
    printf("%d\n", add(&number, &number));
    return 0;
}

Offensichtlich wird es 8 ausgeben; es addiert 4 zu sich selbst. Wenn wir jedoch hinzufügen restrict zu add so:

int add(int *restrict a, int *restrict b) {
    return *a + *b;
}

Dann das vorherige main ist jetzt ungültig; es vergeht &number als beide Argumente. Sie können jedoch zwei Zeiger übergeben, die auf unterschiedliche Stellen zeigen.

int main(int argc, char **argv) {
    int numberA=4;
    int numberB=4;
    printf("%d\n", add(&numberA, &numberB));
    return 0;
}

  • Informationen darüber, wie dies von Vorteil ist, finden Sie unter die Wikipedia-Seite.

    – ughoavgfhw

    14. Juli 2011 um 3:32 Uhr


  • @ugho: Es ist ziemlich offensichtlich, wie vorteilhaft es ist, denken Sie nur daran, wie Sie es implementieren würden memmove()

    – ninjalj

    14. Juli 2011 um 6:45 Uhr

1370950cookie-checkWas bedeutet „restrict“ in der Funktionssignatur?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy