Na zajęciach z programowania systemów, w których brałem udział w poprzednim semestrze, musieliśmy zaimplementować podstawowy klient / serwer w języku C. Podczas inicjowania struktur, takich jak sock_addr_in
lub bufory znaków (których używaliśmy do przesyłania danych między klientem a serwerem) profesor poinstruował nas, abyśmy tylko ich używali, bzero
a nie memset
inicjowali. Nigdy nie wyjaśnił dlaczego, a jestem ciekawy, czy jest ku temu ważny powód?
Widzę tutaj: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown, który bzero
jest bardziej wydajny ze względu na fakt, że zawsze będzie zerował pamięć, więc nie trzeba będzie wykonać dodatkowe czynności sprawdzające memset
. To jednak niekoniecznie wydaje się być powodem, aby absolutnie nie używać memset
do zerowania pamięci.
bzero
jest uważany za przestarzały, a ponadto nie jest standardową funkcją C. Zgodnie z instrukcją, memset
jest preferowany z bzero
tego powodu. Dlaczego więc chcesz nadal używać bzero
over memset
? Tylko ze względu na wzrost wydajności, czy może to coś więcej? Podobnie, jakie są korzyści z memset
ponad bzero
które sprawiają, że de facto korzystną opcją dla nowych programów?
memset
może być nieco mniej wydajny z powodu „trochę więcej sprawdzania”, jest zdecydowanie przypadkiem przedwczesnej optymalizacji: jakiekolwiek korzyści, które możesz zobaczyć z pominięcia jednej lub dwóch instrukcji procesora, nie są tego warte, gdy możesz zagrozić przenośności kod. bzero
jest przestarzały i to wystarczający powód, aby go nie używać.