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_inlub 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, bzeroa nie memsetinicjowali. 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 bzerojest 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ć memsetdo zerowania pamięci.
bzerojest uważany za przestarzały, a ponadto nie jest standardową funkcją C. Zgodnie z instrukcją, memsetjest preferowany z bzerotego powodu. Dlaczego więc chcesz nadal używać bzeroover memset? Tylko ze względu na wzrost wydajności, czy może to coś więcej? Podobnie, jakie są korzyści z memsetponad bzeroktóre sprawiają, że de facto korzystną opcją dla nowych programów?
memsetmoż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. bzerojest przestarzały i to wystarczający powód, aby go nie używać.