-
- Ну мы же не про Си, а про плюсплюс. Там в STL сплошные new и
delete. И что, можно использовать std::vector без мутексов только в
одном потоке? - йцyкeн(30.11.2020 19:06)
- new -- это вызов operator new(sizeof(T)) и последующий вызов Т(...)
delete -- вызов ~T() и вызов operator delete(). Для массивов ещё
добавляется пробежка по всем элементам массива и вызов T() или ~T()
для каждого. Обычно функции operator new() и operator delete() --
этот тот же malloc() и free()... Так что в менеджменте памяти
ничего нового. Конечно нельзя вектор без мьютекса использовать
параллельно в разных потоках. Впрочем это касается любого класса
вообще. Любой fk0(123 знак., 30.11.2020 22:19)
- Я не про использование одного и того же вектора, а про ситуацию, когда функция в одном потоке имеет локальную переменную типа vector<double>, а функция в другом потоке - другую переменную, и не обязательно vector, пусть это будет map<string, int>. Я думаю, что new и delete потоков работают с одним пулом памяти, и это требует синхронизации, и она в "настоящих" операционках есть, а с RTOS для микроконтроллеров я дела не имел. - йцyкeн(30.11.2020 23:33)
- new -- это вызов operator new(sizeof(T)) и последующий вызов Т(...)
delete -- вызов ~T() и вызов operator delete(). Для массивов ещё
добавляется пробежка по всем элементам массива и вызов T() или ~T()
для каждого. Обычно функции operator new() и operator delete() --
этот тот же malloc() и free()... Так что в менеджменте памяти
ничего нового. Конечно нельзя вектор без мьютекса использовать
параллельно в разных потоках. Впрочем это касается любого класса
вообще. Любой fk0(123 знак., 30.11.2020 22:19)
- Ну мы же не про Си, а про плюсплюс. Там в STL сплошные new и
delete. И что, можно использовать std::vector без мутексов только в
одном потоке? - йцyкeн(30.11.2020 19:06)