| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > GNU toolchain > mingw, как задать выравнивание для malloc? |
| Автор: victor79 5.4.2009, 03:03 |
| программа компилируемая на mingw, по умолчанию malloc выдает выравнивание под 8 байт. А мне для sse нужно 16, может кто знает, есть ли опция такая для компилятора? |
| Автор: MAKCim 5.4.2009, 09:49 |
| компилятор здесь не причем |
| Автор: victor79 5.4.2009, 17:31 |
| тут два варианта, либо используется malloc системы виндовс, тогда на него можно воздействовать только если есть такое в винапи, или используется внутренний, тогда возможно по дефайну или по установке переменной. И вопрос есть ли такое, и где его искать? И можно потратить часы на поиск ответа, или вдруг кто уже знает, и можно не тратить на время на поиск ответа. |
| Автор: Alexeis 5.4.2009, 17:39 |
| Можно выделить больше памяти и выравнять самому. |
| Автор: Lazin 5.4.2009, 19:13 |
| есть ф-я VirtualAlloc, с ее помощью можно написать свою версию malloc |
| Автор: Alexeis 5.4.2009, 19:53 | ||
А как же список блоков? malloc в дебаговой версии выделяет на 10 байт больше для каждого выделения для системной информации, в дебаговой 36 байт сверх. Если при каждой операции выделить памяти на 15 байт больше чем нада, то такой адрес будет гарантированно выравненным, а если известно что malloc выравнивает на границу 8ми байт, то достаточно выделить на 8 байт больше, чтобы прибавить их к указателю в случае если он не выравнен на 16 байт. Но в таком случае придется написать свою функцию освобождения таких блоков, чтобы перед удалением провести обратное смещение на 8 байт. |
| Автор: GoldFinch 5.4.2009, 20:08 | ||
Alexeis, это стандартный маллок чтото выделяет сверх того что ему заказали, а если написать свой этого не будет
это для С++ но для С принцип тот же |
| Автор: Alexeis 5.4.2009, 20:16 |
| GoldFinch, и что? Если выделить несколько раз по 16 байт, то будут адреса будут смещены на 16 строго байт? не на 26 или 72? |
| Автор: GoldFinch 5.4.2009, 20:36 | ||
да, действительно, кратность 16 не получается
|
| Автор: Alexeis 5.4.2009, 21:17 |
| GoldFinch, HeapAlloc это куча, а все кучи работают сходно, они хранят информацию о блоке памяти в самом блоке. Так эффективнее. Иначе пришлось бы выделять 2 блока памяти один под описатель и один под саму память. |
| Автор: nickless 7.4.2009, 22:56 |
| Есть еще posix_memalign Добавлено через 2 минуты и 26 секунд Мы её кстати как раз для SSE2 и использовали |