LINUX.ORG.RU

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

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

Несмотря на то, что в мане написано If ptr is NULL, no operation is performed.

По-моему, есть 2 причины для этого:
1. Большинство функций, удаляющих объекты, не следуют этому правилу, - им нельзя передавать нулевой указатель. Поэтому для единообразия делается проверка и перед free().
2. Компиляторы оставляют библиотечный вызов free(), тут не происходит оптимизаций, так что в случаях, если указатель вероятно нулевой, проверка без вызова функции будет производительней

Оправдан ли этот зуд или все там норм с кучей?

Современные аллокаторы достаточно эффективно работают с памятью, так что много маленьких кусочков - это не страшно.

Нельзя часто выделять освобождать.

Это смотря насколько часто. Если время полезной работы фрагмента программы сопоставимо со временем, потраченным на работу аллокатора, то да, нельзя. Если несопоставимо больше, то всё равно.

Исправление Sorcerer, :

Несмотря на то, что в мане написано If ptr is NULL, no operation is performed.

По-моему, есть 2 причины для этого:
1. Большинство функций, удаляющих объекты, не следуют этому правилу, - им нельзя передавать нулевой указатель. Поэтому для единообразия делается проверка и перед free().
2. Компиляторы оставляют библиотечный вызов free(), тут не происходит оптимизаций, так что в случаях, если указатель вероятно нулевой проверка без вызова функции будет производительней

Оправдан ли этот зуд или все там норм с кучей?

Современные аллокаторы достаточно эффективно работают с памятью, так что много маленьких кусочков - это не страшно.

Нельзя часто выделять освобождать.

Это смотря насколько часто. Если время полезной работы фрагмента программы сопоставимо со временем, потраченным на работу аллокатора, то да, нельзя. Если несопоставимо больше, то всё равно.

Исправление Sorcerer, :

Несмотря на то, что в мане написано If ptr is NULL, no operation is performed.

По-моему, есть 2 причины для этого:
1. Большинство функций, удаляющих объекты, не следуют этому правилу, - им нельзя передавать ненулевой указатель. Поэтому для единообразия делается проверка и перед free().
2. Компиляторы оставляют библиотечный вызов free(), тут не происходит оптимизаций, так что в случаях, если указатель вероятно нулевой проверка без вызова функции будет производительней

Оправдан ли этот зуд или все там норм с кучей?

Современные аллокаторы достаточно эффективно работают с памятью, так что много маленьких кусочков - это не страшно.

Нельзя часто выделять освобождать.

Это смотря насколько часто. Если время полезной работы фрагмента программы сопоставимо со временем, потраченным на работу аллокатора, то да, нельзя. Если несопоставимо больше, то всё равно.

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

Несмотря на то, что в мане написано If ptr is NULL, no operation is performed.

По-моему, есть 2 причины для этого: 1. Большинство функций, удаляющих объекты, не следуют этому правилу, - им нельзя передавать ненулевой указатель. Поэтому для единообразия делается проверка и перед free(). 2. Компиляторы оставляют библиотечный вызов free(), тут не происходит оптимизаций, так что в случаях, если указатель вероятно нулевой проверка без вызова функции будет производительней

Оправдан ли этот зуд или все там норм с кучей?

Современные аллокаторы достаточно эффективно работают с памятью, так что много маленьких кусочков - это не страшно.

Нельзя часто выделять освобождать.

Это смотря насколько часто. Если время полезной работы фрагмента программы сопоставимо со временем, потраченным на работу аллокатора, то да, нельзя. Если несопоставимо больше, то всё равно.