Я должен обеспечить сборку x64 своего приложения?

Возможно, я упускаю важную суть x64 платформы здесь, но мое восприятие состояло в том, что x64 приложения только лучше работали, чем x86 версии (на x64 ОС и аппаратных средствах, очевидно), когда большие объемы памяти, большие указатели или другие требовательные факторы были включены.

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

Профессионалы:

  • Потенциально более высокая производительность (в какой условия, хотя)

Недостатки:

  • Дополнительная сборка для создавания/поддерживания
  • Потенциальные ошибки в цели x64, которые не присутствуют в цели x86
  • Зависимость от x64 версий поставщика/ОС DLLs, требуя другого контрольного списка установки и представляя дополнительные сложности поиска и устранения неисправностей

Каковы некоторые неопровержимые доводы, которые должны заставить меня пересматривать добавление x64-скомпилированной-версии моего приложения?

10
задан SqlRyan 2 January 2010 в 16:24
поделиться

6 ответов

Попробуйте изменить

android:layout_width="wrap_content"
android:layout_height="wrap_content"

на

android:layout_width="fill_parent"
android:layout_height="fill_parent"

в файле main.xml верхнего уровня LinearLayout

Это должно выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <WebView 
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

</LinearLayout>
-121--3978185-
def func(*args): 
    pass

При определении функции этого пути * args будет массивом аргументов, передаваемых функции. Это позволяет вашей функции работать, не зная заранее, сколько аргументов будет передано ей.

Вы делаете это и с аргументами ключевых слов, используя * * kwargs :

def func2(**kwargs): 
    pass

См.: Произвольные списки аргументов


В вашем случае вы определили класс, который действует как словарь. Метод dict.pop определяется как pop (клавиша [, по умолчанию]) .

Метод не использует параметр default . Однако определение метода с помощью * args и передача * args в dict.pop () позволяет вызывающему абоненту использовать параметр default .

Другими словами, можно использовать метод pop класса, например dict.pop :

my_a = a()
value1 = my_a.pop('key1')       # throw an exception if key1 isn't in the dict
value2 = my_a.pop('key2', None) # return None if key2 isn't in the dict
-121--832277-

Еще одна потенциальная причина компиляции и отладки версии x64 заключается в том, что она может обнаружить скрытые ошибки в версии x86. Например, это может привести к неправильным преобразованиям между 32-разрядными целыми числами и (теперь) 64-разрядными указателями. Это также позволяет поддерживать x64 в будущем.

Однако, если только ваше приложение не выиграет от 64-разрядных целых чисел, дополнительных регистров ЦП, большего космоса памяти (более 3,5 Гбайт) или не реализует драйвер устройства, пребывание с 32-разрядным приложением нормально. Все основные операционные системы поддерживают одновременное выполнение приложений x32 и x64, поэтому не будет значительного продвижения к 64-разрядным приложениям.

BTW. Приложения на базе .NET автоматически получают преимущества от выполнения в 64-разрядной системе без каких-либо изменений кода. Дополнительное тестирование не требуется.

4
ответ дан 4 December 2019 в 01:01
поделиться

Потенциальный прирост производительности связан в основном с использованием 64-битных целых чисел (примерно в 4 раза быстрее в x64 сборке на моей машине, чем в x86 на той же), а также с тем, что компиляторы могут предполагать, что некоторые возможности процессора универсально присутствуют в процессорах, поддерживающих x64, таких как SSE2, &c.; это может привести к более оптимизированному коду.

Для многих приложений, особенно маленьких, не так уж и сложно быть 64-битной чистотой, для больших - это большая головная боль. Причин для сжатия, как правило, мало. Но некоторые платформы по умолчанию не устанавливают свою 32-битную поддержку в 64-битных версиях (думаю, для этого нужно явно указать FreeBSD, но я могу ошибиться)

.
3
ответ дан 4 December 2019 в 01:01
поделиться

Ваша программа выиграет, если она использует много longs, а WOW, конечно, означает незначительное падение производительности (очень незначительное, хотя и потому, что процессор по этой причине имеет режим совместимости). ..

Поддержка Windows для 32-битных программ в будущем будет ухудшаться (хотя и медленно), поэтому я говорю, что через год или 2, вы можете просто поинтересоваться, зачем вам 32-битное приложение...

Кроме того, 64-битная сборка вашего приложения, на самом деле, может быть гораздо более оптимизирована, чем 32-битная сборка, потому что с 64-битной сборкой у вас гарантированно будет довольно много вещей, таких как SSE2.

1
ответ дан 4 December 2019 в 01:01
поделиться

Это часто основано на человеческом факторе, а не на объективной технической аргументации. 64-битная строка самая последняя и самая большая и должна быть лучше 32-битной. Если клиент хочет этого, он всегда прав. Общались пользователи windows, говоря, что их целью было сделать так, чтобы при просмотре их списка процессов в windows *32 не появлялся рядом ни с одним из их приложений.

Часто это также подогревается замешательством в вопросе совместимости, когда люди имеют 64-битные операционные системы и просто хотят быть уверенными в том, что программа будет работать на их компьютерах. Ожидать, что среднестатистический человек поймет техническую демаркационную линию между 32-битными процессами на 64-битной ОС нереально. Если явно не указано на упаковке, то это может быть точкой замешательства/замешательства для заказчика, приобретающего новое программное обеспечение. Часто по этой причине упоминается 64-битный процесс. Как правило, это действительно означает только 64-битную совместимость.

Сейчас есть несколько 64-битных приложений (флеш-плеер и google earth top my list), которые не могут появиться достаточно скоро.

.
1
ответ дан 4 December 2019 в 01:01
поделиться

Есть одна причина: интеграция с 64-битными приложениями, как написание расширения оболочки. 64-битный процесс не может напрямую загрузить 32-битную DLL, поэтому необходимо сделать и вашу 64-битную.

.
1
ответ дан 4 December 2019 в 01:01
поделиться

Производительность; x86_64 быстрее x86 на небольшую величину (что также зависит от вашего компилятора), по уже изложенным причинам. Также проще поддерживать действительно огромные наборы данных, но, конечно, многие приложения никогда не нуждаются в этом.

Конечно, в Linux и OS X действительно должна поддерживаться x86_64; я набираю это в 64-битном браузере в OS X, а мой Linux box в углу также 64-битный почти исключительно. 64-битная Windows - это скорее вопрос, но это уже идет (с драйверами).

1
ответ дан 4 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: