Re[5]: Теория памяти
От: CreatorCray  
Дата: 30.12.08 11:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

RO>>В C++03 вообще никаких потоков нет, так что любые потоки — UB . RO>В зависимости от реализации, new-там-delete-здесь может быть безопасно, а может вызвать проблемы.

А>В стандарте — нету. В конкретных реализациях компиляторов и CRT — есть. В частности при использовании MSVC и включении MT-safe рантайма new/delete можно гарантированно без проблемно делать из разных потоков. Если же вы не включили правильнынй рантайм из каких то соображений — вы сами себе злобный Буратино.
Т.е. это исключительно implementation specific грабли конкретных реализаций CRT.

RO>>Да, и еще есть любители делать new в динамической библиотеке и delete в основном модуле, что может вызывать самые разные результаты в зависимости от фазы луны.

А>Это совершенно из другой оперы проблема.
Это тоже строго implementation specific проблема CRT.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Теория памяти
От: Аноним  
Дата: 30.12.08 14:53
Оценка:
Здравствуйте, CreatorCray, Вы писали:

А>>В стандарте — нету. В конкретных реализациях компиляторов и CRT — есть. В частности при использовании MSVC и включении MT-safe рантайма new/delete можно гарантированно без проблемно делать из разных потоков. Если же вы не включили правильнынй рантайм из каких то соображений — вы сами себе злобный Буратино.

CC>Т.е. это исключительно implementation specific грабли конкретных реализаций CRT.

Ты можешь себе представить, что если когда-нибудь стандарт
установит правила на этот счет, то бы было явное ограничение new/delete в одном потоке?
Это бы противоречило уже сложившейся практике с распространненными компиляторами.
Re[5]: Теория памяти
От: degor Россия  
Дата: 02.01.09 13:45
Оценка:
Здравствуйте, rastoman, Вы писали:

R>Здравствуйте, Roman Odaisky, Вы писали:


RO>>Да, и еще есть любители делать new в динамической библиотеке и delete в основном модуле, что может вызывать самые разные результаты в зависимости от фазы луны.

R>Если CRT прилинковано статически, то да. А если динамически, то можно выделять в одном модуле, а освобождать в другом.
а если основной модуль и динамическая библиотека прилинкованы динамически, но к разным рантаймам?
Re: Теория памяти
От: Vinni-puh Россия  
Дата: 03.01.09 12:37
Оценка:
А>
А>..................
А>cObject * iObject = new cObject;
А>DWORD iThreadID;
А>HANDLE a_HThread;

А>a_HThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFun, iObject, 0, & iThreadID);
А>..................

А>// Далее уже в потоковой функции

А>DWORD WINAPI ThreadFun(void * arguments)
А>{
А>    cObject * o = (cObject *) arguments;
А>        while(SomeCondition) {
А>        // Что-то там происходит и в итоге решил я цикл покинуть
А>        }

А>        delete s; // И вот тут я ловлю ошибку.
А>


Насколлько я понимаю, под CObjeсt подразумевается MFC-шный класс. Так вот, чтобы MFC как-то работала потоки нужно запускать AfxBeginThread().
Во-вторых MFC-шные классы не следует создавать в одном потоке, а уничтожать в другом. Вылетает на всяких ASSERT_VALID-ах внутри деструкторов. Так что рекомендую либо не наследовать объекты от MFC, либо уничтожать их в том же потоке, в котором они созданы.
Re[5]: Теория памяти
От: Vamp Россия  
Дата: 08.01.09 22:30
Оценка:
RO>>Кстати, в других ОС вообще есть такое недоразумение, как неиспользование libc?
CC>Это всего лишь либа. Да, в ней есть некоторые вещи, которые компилер использует автоматически (типа поддержки int64 на 32-битной платформе, некоторые FPU хэлперы и т.п.), но никто не заставляет использовать все остальное.

Действительно, почему-то от виндузятников постоянно слышно: КРТ не использую! Как слинковать программу, чтобы не использовала КРТ? Причина, вероятно, в том, что винда имеет некие полезные функции, которые традиционно входят в КРТ. Например, все богатство функций работы со строками. В той же солярке ничего такого нет.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Теория памяти
От: CreatorCray  
Дата: 09.01.09 09:23
Оценка:
Здравствуйте, Vamp, Вы писали:

RO>>>Кстати, в других ОС вообще есть такое недоразумение, как неиспользование libc?

CC>>Это всего лишь либа. Да, в ней есть некоторые вещи, которые компилер использует автоматически (типа поддержки int64 на 32-битной платформе, некоторые FPU хэлперы и т.п.), но никто не заставляет использовать все остальное.

V>Действительно, почему-то от виндузятников постоянно слышно: КРТ не использую!

V>Как слинковать программу, чтобы не использовала КРТ?

V>Причина, вероятно, в том, что винда имеет некие полезные функции, которые традиционно входят в КРТ.

Да хотяб работа с файлами: MMF, потоки, \\?\, sparced файлы, Junctions, Gather/Scatter, управление кэшированием — всего этого нет в CRT, да и быть не может.
ЗЫ: ДА! Я это всё использую.

V>Например, все богатство функций работы со строками.

Нафига CRT функции для строк если можно юзать STL-like строки. Оно как то поудобнее в разы.

Все что я использую из CRT (впрочем и то — косвенно) — это встраиваемые компилером функции преобразования int->float, работа с int64 на 32bit и т.п.
Остальное попросту не нужно.
Но это не значит что я выкорчевываю CRT и программ. Я просто не использую ничего, что вызывается явно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Теория памяти
От: Vamp Россия  
Дата: 09.01.09 15:50
Оценка:
CC>Да хотяб работа с файлами: MMF, потоки, \\?\, sparced файлы, Junctions, Gather/Scatter, управление кэшированием — всего этого нет в CRT, да и быть не может.
CC>ЗЫ: ДА! Я это всё использую.
Ну правильно, причем тут КРТ? Я же немного не о том.

CC>Нафига CRT функции для строк если можно юзать STL-like строки. Оно как то поудобнее в разы.

Зависит. Может потребоваться для работы со всякими третьими библиотеками, тем же API ОС и т.д.
Да здравствует мыло душистое и веревка пушистая.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.