|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.03.2013, 08:49 | #1 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Работа 32 битной програмки под 64
В общем есть у меня программа написаная на CodeGear Rad Studio 2009. Под Виндовс 32 работает отлично. Но когда начинает работать под x64, то начинаются какието ошибки (Не у всех). Причем try except их не ловит. Есть ли какието хитрости в типах переменных. Допустим вместо Integer использовать Int64, а вместо PWideChar использовать PChar. Не сочтите за слабоумного. Но я всю жизнь сидел на Win32 и в x64 полный 0.
В программе использвуются: -Мутексы. -Поиск окон по названию\классу. -Запуск другой программы с параметрами. -Уничтожение чужого процесса. Хм. Можетбыть на 64 битках это както подругому делается нежели на 32 битках? Если нужна сама программа, то залью. И еще можноли запустить чужую программу в режиме совместимости с XPsp2(например Shellexecute)?
Каждый день узнаю новое...
Последний раз редактировалось Anton911; 23.03.2013 в 09:11. |
23.03.2013, 13:23 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Правильно написанная программа будет одинаково работать в любом случае. Но разные ОС могут по разному реагировать на имеющиеся в ней ошибки, какие-то - прощать, а другие - нет.
Так что можно посоветовать только не забывать инициализировать все переменные (даже если считаете, что они должны быть автоматически инициализированы нулем), пройти программу под отладчиком со всеми включенными проверками (на переполнение, на выход из допустимого диапазона и пр.) |
24.03.2013, 05:32 | #3 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Сделал как вы советовали. Есть ли еще советы?
Каждый день узнаю новое...
|
24.03.2013, 12:12 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
системные функции будут работать как и прежде, только быстрее и лучше.
Если у вас не специфическое ПО(Работа с Файловой системой на прямую, работа с памятью, все где доступный размер ОЗУ, размер переменной, имеет значение) то проблем не будет. |
24.03.2013, 12:29 | #5 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
24.03.2013, 12:32 | #6 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Антон, ты бы ошибки описал бы что ли... а то сейчас получится гадание на кофейной гуще.
|
24.03.2013, 13:33 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Автору: Ошибки в студию.
I'm learning to live...
|
|
24.03.2013, 15:00 | #8 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Сегодня нашел один серьезный баг с поиском окон. Переделал функцию, баг больше не появлялся. Покачто не знаю нормально ли все будет на 64х битках или нет.
Каждый день узнаю новое...
|
24.03.2013, 15:04 | #9 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Код:
Лучше и быстрее хотя бы потому, что за 1 такт обработается в 2 раза больше информации. Вы считаете, что это не важно? И бонус: Нет лимитов на размеры ОЗУ. Больше возможностей для реализации ассемблерного кода. если у вас длинная математика, то теперь все проще. Числа не помещающиеся в пределы для Win32 - с лихвой и без проблем влазят в пределы для Wn64, и без вашего кода. ТС, на MSDN в библиотеке функции читайте сноски к используемым функциям, там бывает, говорят что для такой-то архитектуры надо делать так-то... потому что ... Последний раз редактировалось Человек_Борща; 24.03.2013 в 15:17. |
|
24.03.2013, 16:22 | #10 | ||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Во-первых, не факт. Что сложение, что умножение - при увеличенной разрядности операция будет выполняться дольше. Но если нам достаточно 32 разрядов, значит, общее замедление не будет сопровождаться никаким полезным эффектом. Далее. Известно, что один из серьезно ограничивающих факторов - пропускная способность шины памяти. Совершенно очевидно, что для передачи того же количества 64-разрядных адресов потребуется больше времени, чем 32-разрядных. Т.е, опять же, замедление работы налицо. Цитата:
= если Вам не хватает 2 Гб памяти... - если Вам не хватает 32 разрядов для данных... В этих случаях, действительнее, 64-разрядный код будет эффективнее. Во всех же остальных случаях (а это пока подавляющее большинство) Процессор будет выполнять никому не нужную работу по обработке неиспользуемых разрядов данных и пересылке по шине разрядов адреса (да и данных тоже), в два раза сократится эффективный объем кэша и т.п. мелкие неприятности. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
SaveToFile в 32 битном приложении на 64 битной ОС. | XerSon | Общие вопросы Delphi | 15 | 28.12.2012 12:37 |
Программирование на Си в 64 битной системе | MrBrain | Общие вопросы C/C++ | 3 | 13.12.2011 10:22 |
Чайник с 64 битной системой | Руслан Сабиров | Свободное общение | 5 | 28.10.2011 14:18 |
RC6 на 32 битной платформе. | Ghost of Night | Общие вопросы Delphi | 0 | 02.07.2011 01:14 |
максимальный размер массива в 32-битной оси | Adamant | Свободное общение | 5 | 03.12.2008 21:14 |