LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

Какие еще аллокации в swap?

void swap (void* a, void* b, size_t n) {
    size_t buf_size = 64; // можно больше, можно меньше
    char buf[64];
    size_t m = n % buf_size;
    n /= buf_size;
    for (size_t i = 0; i < n; i++) {
        memcpy (buf, a, buf_size);
        memcpy (a, b, buf_size);
        memcpy (b, buf, buf_size);
    }
    memcpy (buf, a, m);
    memcpy (a, b, m);
    memcpy (b, buf, m);
}

Проверки сам допишешь.

Исходная версия Siborgium, :

Какие еще аллокации в swap?

void swap (void* a, void* b, size_t n) {
    size_t buf_size = 64; // можно больше, можно меньше
    char buf[64];
    size_t m = n % buf_size;
    n /= buf_size;
    for (size_t i = 0; i < n; i++) {
        memcpy (buf, a, buf_size);
        memcpy (a, b, buf_size);
        memcpy (b, buf, buf_size);
    }
    memcpy (buf, a, m);
    memcpy (a, b, m);
    memcpy (b, buf, m);
}