/fixed-size-alloc

fixed size alloc

Primary LanguageC++

fixed-size-alloc

fixed size alloc

Example

int main()
{
     int times = 10000000;
    {
        fixed_size_alloc<64, 4192> fsa;
        auto start = microsecond();
        for (int i = 0; i < times; ++i)
        {
            void* buf1 = fsa.alloc(16);
            void* buf2 = fsa.alloc(16);
            void* buf3 = fsa.alloc(32);
            void* buf4 = fsa.alloc(32);
            void* buf5 = fsa.alloc(64);
            not_null(buf1);
            not_null(buf2);
            not_null(buf3);
            not_null(buf4);
            not_null(buf5);
            memcpy(buf1, &i, sizeof(i));
            memcpy(buf2, &i, sizeof(i));
            memcpy(buf3, &i, sizeof(i));
            memcpy(buf4, &i, sizeof(i));
            memcpy(buf5, &i, sizeof(i));
            fsa.free(buf1);
            fsa.free(buf2);
            fsa.free(buf3);
            fsa.free(buf4);
            fsa.free(buf5);
        }

        std::cout << "fixed_size_alloc cost " << microsecond() - start << "us" << std::endl;
    }

    {
        auto start = microsecond();
        for (int i = 0; i < times; ++i)
        {
            void* buf1 = ::malloc(16);
            void* buf2 = ::malloc(16);
            void* buf3 = ::malloc(32);
            void* buf4 = ::malloc(32);
            void* buf5 = ::malloc(64);
            not_null(buf1);
            not_null(buf2);
            not_null(buf3);
            not_null(buf4);
            not_null(buf5);
            memcpy(buf1, &i, sizeof(i));
            memcpy(buf2, &i, sizeof(i));
            memcpy(buf3, &i, sizeof(i));
            memcpy(buf4, &i, sizeof(i));
            memcpy(buf5, &i, sizeof(i));
            ::free(buf1);
            ::free(buf2);
            ::free(buf3);
            ::free(buf4);
            ::free(buf5);
        }
        std::cout << "malloc cost " << microsecond() - start << "us" << std::endl;
    }
    return 0;
}

Result

//Some cases 20 times faster than malloc
fixed_size_alloc cost 115497us
malloc cost 3371072us