Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2013, 08:49   #1
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 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.
Anton911 вне форума Ответить с цитированием
Старый 23.03.2013, 13:23   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Правильно написанная программа будет одинаково работать в любом случае. Но разные ОС могут по разному реагировать на имеющиеся в ней ошибки, какие-то - прощать, а другие - нет.

Так что можно посоветовать только не забывать инициализировать все переменные (даже если считаете, что они должны быть автоматически инициализированы нулем), пройти программу под отладчиком со всеми включенными проверками (на переполнение, на выход из допустимого диапазона и пр.)
s-andriano вне форума Ответить с цитированием
Старый 24.03.2013, 05:32   #3
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Сделал как вы советовали. Есть ли еще советы?
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 24.03.2013, 12:12   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

системные функции будут работать как и прежде, только быстрее и лучше.
Если у вас не специфическое ПО(Работа с Файловой системой на прямую, работа с памятью, все где доступный размер ОЗУ, размер переменной, имеет значение) то проблем не будет.
Человек_Борща вне форума Ответить с цитированием
Старый 24.03.2013, 12:29   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
системные функции будут работать как и прежде, только быстрее и лучше.
Насчет быстрей - как оценить? Насчет лучше - в чем прикол? Типа под 32 работают плохо, постоянно ошибки, а под 64 - гораздо лучше?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2013, 12:32   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Антон, ты бы ошибки описал бы что ли... а то сейчас получится гадание на кофейной гуще.
counter вне форума Ответить с цитированием
Старый 24.03.2013, 13:33   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Насчет быстрей - как оценить?
По-моему никак. Они будут работать так же (даю 99.9%).
Автору: Ошибки в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2013, 15:00   #8
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Сегодня нашел один серьезный баг с поиском окон. Переделал функцию, баг больше не появлялся. Покачто не знаю нормально ли все будет на 64х битках или нет.
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 24.03.2013, 15:04   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Насчет быстрей - как оценить? Насчет лучше - в чем прикол? Типа под 32 работают плохо, постоянно ошибки, а под 64 - гораздо лучше?
Код:
По-моему никак. Они будут работать так же (даю 99.9%).
угу, а win64 ничем не отличается от win32, гарантия(99.9%). {с0rKa3m}

Лучше и быстрее хотя бы потому, что за 1 такт обработается в 2 раза больше информации. Вы считаете, что это не важно?
И бонус: Нет лимитов на размеры ОЗУ. Больше возможностей для реализации ассемблерного кода.

если у вас длинная математика, то теперь все проще. Числа не помещающиеся в пределы для Win32 - с лихвой и без проблем влазят в пределы для Wn64, и без вашего кода.

ТС, на MSDN в библиотеке функции читайте сноски к используемым функциям, там бывает, говорят что для такой-то архитектуры надо делать так-то... потому что ...

Последний раз редактировалось Человек_Борща; 24.03.2013 в 15:17.
Человек_Борща вне форума Ответить с цитированием
Старый 24.03.2013, 16:22   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Лучше и быстрее хотя бы потому, что за 1 такт обработается в 2 раза больше информации. Вы считаете, что это не важно?
Это Вы о 64 разряда vs 32?
Во-первых, не факт.
Что сложение, что умножение - при увеличенной разрядности операция будет выполняться дольше.
Но если нам достаточно 32 разрядов, значит, общее замедление не будет сопровождаться никаким полезным эффектом.

Далее.
Известно, что один из серьезно ограничивающих факторов - пропускная способность шины памяти.
Совершенно очевидно, что для передачи того же количества 64-разрядных адресов потребуется больше времени, чем 32-разрядных.
Т.е, опять же, замедление работы налицо.
Цитата:
И бонус: Нет лимитов на размеры ОЗУ. Больше возможностей для реализации ассемблерного кода.

если у вас длинная математика, то теперь все проще. Числа не помещающиеся в пределы для Win32 - с лихвой и без проблем влазят в пределы для Wn64, и без вашего кода.
Вот именно - если:
= если Вам не хватает 2 Гб памяти...
- если Вам не хватает 32 разрядов для данных...
В этих случаях, действительнее, 64-разрядный код будет эффективнее.
Во всех же остальных случаях (а это пока подавляющее большинство)
Процессор будет выполнять никому не нужную работу по обработке неиспользуемых разрядов данных и пересылке по шине разрядов адреса (да и данных тоже), в два раза сократится эффективный объем кэша и т.п. мелкие неприятности.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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