|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
Всем доброго вечера, работают ли инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} (по идее позволяющие выйти за пределы 2Гб в x32 приложениях) с FastMM5 и как это проверить? Попробовал на паре проектов но непонятно есть эффект или нет (например в проекте в котором есть Out of Memory проблемма осталась) . Как правильно количественно определить эффект от этих инструкций? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 20:41 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
hlopotun, Сказать версию Delphi прежде всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 21:40 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
hlopotun, Проверить очень легко - напишите тестовый цикл Код: pascal 1. 2.
если в ходе выполнения программа не упадёт, значит опция работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 21:47 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
DarkMaster hlopotun, Сказать версию Delphi прежде всего. 10.4.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 21:58 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
zedxxx hlopotun, Проверить очень легко - напишите тестовый цикл Код: pascal 1. 2.
если в ходе выполнения программа не упадёт, значит опция работает. да, тест прошел успешно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 22:01 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
какие проблемы потенциально может вызвать использование этой опции? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 22:05 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
hlopotun, Может вызвать AV, если с указателями работаете как с интами. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 22:19 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
zedxxx hlopotun, Может вызвать AV, если с указателями работаете как с интами. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 21:56 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
_Vasilisk_, от огорчения... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 22:24 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
_Vasilisk_, Приведение беззнакового типа (Pointer), к знаковому (Integer) чревато переполнением последнего. И если затем выполнить некоторый инкремент/декремент этого числа и обратное приведение, можете получить указатель, который будет указывать абы куда. Безопасный тип для приведения указателей в число и обратно - NativeUInt . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 23:22 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
zedxxx к знаковому (Integer) чревато переполнением последнего. zedxxx И если затем выполнить некоторый инкремент/декремент этого числа и обратное приведение, можете получить указатель, который будет указывать абы куда. zedxxx Безопасный тип для приведения указателей в число и обратно - NativeUInt . ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 00:00 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
zedxxx Приведение беззнакового типа (Pointer), к знаковому (Integer) чревато переполнением последнего. Это может доставить проблемы только тогда, когда включён контроль переполнения ({$O+} или как его там). Но я уже лет тридцать как не видел его включённым. zedxxx И если затем выполнить некоторый инкремент/декремент этого числа и обратное приведение, можете получить указатель, который будет указывать абы куда. RTFM Дополнительный код . ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 01:07 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
zedxxx _Vasilisk_, Приведение беззнакового типа (Pointer), к знаковому (Integer) чревато переполнением последнего. И если затем выполнить некоторый инкремент/декремент этого числа и обратное приведение, можете получить указатель, который будет указывать абы куда. Пример такого можете привести? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 03:27 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
Проблема в арифметике указателей, действительно, есть. Но она не в области знаков +- типа, к которому приводим, и даже не в самом приведении типа, как таковом. Проблема вылете значащих битов за разрядную сетку. Если биты улетели (в результате приведения или операций), то это может привести к ошибке в вычислениях. Позвольте продемонстрировать оба случая на примерах. Пример 1. Приводим адрес к менее широкому целочисленному типу, например, к байту, а потом приводим полученный результат снова к адресу. Совершенно очевидно, что указатель будет испорчен. Пример 2. Похожая ситуация может возникать при адресных вычислениях в алгоритмах поиска, сортировок и т.п. Пусть у нас 32-битные адреса. Пусть у нас есть массив 256 байтов по адресу a0=$FFFF0000. Последний байт этого массива лежит по адресу a2=$FFFF00FF. Очевидно, что "средний" байт находится по адресу a1=$FFFF007F. Однако, адрес "среднего" байта нельзя искать по формуле a1:=(a0+a2) shr 1, т.к. при сложении будет потерян старший бит результата. Правильно так: a1:=a0+(a2-a0) shr 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 10:04 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
Важное уточнение: {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} позволяет получить доступ к 4Gb памяти для 32-х битных приложений только в 64 битных OS. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 17:59 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
zedxxx hlopotun, Может вызвать AV, если с указателями работаете как с интами. Примерно так?: Код: pascal 1. 2. 3. 4. 5. 6. 7.
или так: Код: pascal 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 09:37 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
тут интересно пишут на эту тему ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 09:57 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
Lisichkin Важное уточнение: {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} позволяет получить доступ к 4Gb памяти для 32-х битных приложений только в 64 битных OS. т.е. надо делать так? Код: pascal 1. 2. 3. 4. 5.
или на 32битной ОС $SETPEFLAGS просто не будет работать и к ошибке не приведёт? (неначем проверить, нет 32битной ОС). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 11:21 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
нет, так наверное нельзя. WIN64 это тупо под какую платформу компилируем. Поэтому {$IFDEF WIN64} тут тупо не имеет смысла если компилим под x32. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 11:30 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 12:29 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
Мимопроходящий, А смысл, если ему нужно флаг при линковке поставить ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 13:04 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
_Vasilisk_ Мимопроходящий, А смысл, если ему нужно флаг при линковке поставить да, тут надо как то по другому выкрутиться. Если вообще надо выкручиваться (т.е. если {$SETPEFLAGS $20} при запуске на х32 вызывает ошибку. А вызывает она ошибку или нет непонятно). У когонибуть есть XP? Проверьте, есть ошибка при использовании FastMM5 и {$SETPEFLAGS $20} или нет. То что 3Гб выделяться не будет это понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 14:51 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
19.07.2021 14:51, hlopotun пишет: > У когонибуть есть XP? ХР тоже бывает х64 Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 15:00 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
кстати, если в проекте есть модуль который компилируется в dll ешё в 5й версии Delphi (генератор отчётов привязанным к старой версии delphi/без исходников) то про FastMM5 и {$SETPEFLAGS $20} скорее всего можно забыть или его можно заставить работать со своим менеджером памяти? наверное вопрос разделения памяти между модулями стооит выделить в отдельную тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 15:45 |
|
Инструкции {$SETPEFLAGS $20} или {$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE} и FastMM5
|
|||
---|---|---|---|
#18+
У DLL свой собственный RTL и, соответстенно, менеджер памяти. И вообще ты давно уже перекомпилировал бы всё в 64 бита если бы не тратил время на форум. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 16:10 |
|
|
start [/forum/topic.php?fid=58&fpage=15&tid=2037170]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
105ms |
get topic data: |
16ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
3ms |
others: | 11ms |
total: | 226ms |
0 / 0 |