Информация об изменениях

Сообщение Re[3]: 32/64/AnyCPU - что за @$^%$? от 09.10.2016 17:03

Изменено 09.10.2016 17:37 Sinix

Здравствуйте, vsb, Вы писали:

vsb>Мне понятней не стало. Какая разница, какие там размеры указателей, это же деталь реализации. Какая разница, какой объём доступной памяти, это вообще от конкретной машины зависит, а не только от битности. В Java нет ничего этого, например. Какого размера указатели — знает только виртуальная машина. Сколько доступной памяти — вообще никто не знает, пока не попробуешь её выделить.


Ну раз нормальный вопрос — можно и ответить

1. Как упоминали выше по топику, этот волшебный переключатель влияет только на разрядность процесса, в котором будет запущен рантайм (чур не придираться к словам, сам знаю, что криво сформулировал)

2. При этом сам il-код не меняется и никто не запрещает поправить это флаг пересборкой exe-шника или ч/з corflags.exe.

3. Наконец, выставлять этот флаг для сборок-библиотек крайне не рекомендуется, т.к. оно приводит к крайне своеобразным квестам типа такого.

4. Собственно зачем: изначально этот флаг задумывался исключительно для утилит, которые тесно завязаны на unmanaged-код _и_ заточены либо под x86, или под x64. Особенно полезно, если interop-сборка под другую платформу отсутствует в принципе, т.е. использовать софт не под целевой платформой смысла ноль.

Но где-то к четвёртому дотнету внезапно вспомнили про "перфоманс это тоже важно". Надо сказать что версия jit-а под x64 в те времена не отличалась умом и сообразительностью, да и несколько бОльшее потребление памяти тоже делало своё чёрное дело... В общем "надо что-то делать" и это надо что-то делать делалось менеджерским способом: в VS 2010 x86 сделали платформой по умолчанию для exe-шников. Чтоб не скучали, в сконвертированных проектах в platform при этом иногда значилось AnyCPU (пруф). Больше всего радости это доставляло всяким числомолотилкам, т.к. иногда рантайм таки имеет значение
Автор: Sinix
Дата: 25.06.14
. Суровые мужики стали добавлять тест на "сколько бит у нас в указателе? А если проверю?".

Движуха продолжилась в VS 2012. Следуя заветам Форда, AnyCPU теперь значило любой CPU из x86, конец списка. Ну и чтоб не нарушать традицию, и VS 2015 и VS 2013 иногда делают
  вот так

Inspecting the project’s properties shows the following (in the current Visual Studio UI “Prefer 32-bit” is grayed out and unchecked, where in actuality it is enabled…):

(с) ссылка выше.

Пруф раз, мы на это тоже натыкались
Автор: Sinix
Дата: 10.07.15
два, сюрпризы в комплекте три.


Ну а чего вы хотели? 64-битная Windows — это очень просто!
Автор: Torie
Дата: 20.08.10
Re[3]: 32/64/AnyCPU - что за @$^%$?
Здравствуйте, vsb, Вы писали:

vsb>Мне понятней не стало. Какая разница, какие там размеры указателей, это же деталь реализации. Какая разница, какой объём доступной памяти, это вообще от конкретной машины зависит, а не только от битности. В Java нет ничего этого, например. Какого размера указатели — знает только виртуальная машина. Сколько доступной памяти — вообще никто не знает, пока не попробуешь её выделить.


Ну раз нормальный вопрос — можно и ответить

1. Как упоминали выше по топику, этот волшебный переключатель влияет только на разрядность процесса, в котором будет запущен рантайм (чур не придираться к словам, сам знаю, что криво сформулировал)

2. При этом сам il-код не меняется и никто не запрещает поправить это флаг пересборкой exe-шника или ч/з corflags.exe.

3. Наконец, выставлять этот флаг для сборок-библиотек крайне не рекомендуется, т.к. оно приводит к крайне своеобразным квестам типа такого.

4. Собственно зачем: изначально этот флаг задумывался исключительно для утилит, которые тесно завязаны на unmanaged-код _и_ заточены либо под x86, или под x64. Особенно полезно, если interop-сборка под другую платформу отсутствует в принципе, т.е. использовать софт не под целевой платформой смысла ноль.

Но где-то к четвёртому дотнету внезапно вспомнили про "перфоманс это тоже важно". Надо сказать что версия jit-а под x64 в те времена не отличалась умом и сообразительностью, да и несколько бОльшее потребление памяти тоже делало своё чёрное дело... В общем "надо что-то делать" и это надо что-то делать делалось менеджерским способом: в VS 2010 x86 сделали платформой по умолчанию для exe-шников. Чтоб не скучали, в сконвертированных проектах в platform при этом иногда значилось AnyCPU (пруф). Больше всего радости это доставляло всяким числомолотилкам, т.к. иногда рантайм таки имеет значение
Автор: Sinix
Дата: 25.06.14
. Суровые мужики стали добавлять тест на "сколько бит у нас в указателе? А если проверю?".

Движуха продолжилась в VS 2012. Следуя заветам Форда, AnyCPU теперь значило любой CPU из x86, конец списка. Ну и чтоб не нарушать традицию, и VS 2015 и VS 2013 иногда делают
  вот так

Inspecting the project’s properties shows the following (in the current Visual Studio UI “Prefer 32-bit” is grayed out and unchecked, where in actuality it is enabled…):

(с) ссылка выше.

Пруф раз, мы на это тоже натыкались
Автор: Sinix
Дата: 10.07.15
два, сюрпризы в комплекте три.


Ну а чего вы хотели? 64-битная Windows — это очень просто!
Автор: Torie
Дата: 20.08.10