$('').text('This is fun & stuff').html(); // "This is fun & stuff"
Источник: http://debuggable.com/posts/encode-html-entities-with-jquery:480f4dd6-13cc-4ce9-8071-4710cbdd56cb
На самом деле все сводится к проводам.
В цифровых схемах только нули и единицы (обычно низкое и высокое напряжение) могут передаваться от одного элемента (ЦП) к другому элементу ( микросхема памяти). Если у меня только 1 провод, я могу отправлять по проводу только 1 или 0 за такт. Это означает, что я могу адресовать только 2 байта (при условии байтовой адресации и что все адреса передаются всего за 1 цикл для скорости!)
Если у меня 2 провода, я могу адресовать 4 байта. Потому что я могу отправить: (0, 0), (0, 1), (1, 0) или (1, 1) по двум проводам. Таким образом, в основном это 2 к мощности числа проводов.
Итак, если у меня 32 провода, я могу адресовать 4 ГБ, а если у меня 64 провода, я могу адресовать гораздо больше.
Есть и другие уловки, которые инженеры могут обратиться к большему адресному пространству, чем позволяют провода. Например разделение адреса на две части и отправка одной половины в первом цикле и второй половины в следующем цикле. Но это означает, что ваш интерфейс памяти будет вдвое медленнее.
Отредактировал мои комментарии здесь (неотредактировано);) И сделал это вики, если у кого-то есть что-то интересное, что можно добавить.
Как уже упоминалось в других комментариях, 2 ^ 32 (2 в степени 32) = 4294967296, что составляет 4 ГБ. И 2 ^ 64 равно 18,446,744,073,709,551,616. Если копнуть дальше (и вы, вероятно, читали это в Hennesey & Patterson), процессоры содержат регистры, которые он использует как «рабочее пространство» для хранения результатов своих вычислений. ЦП знает только, как выполнять простую арифметику и знает, как перемещать данные. Естественно, размер этих регистров в битах такой же, как и "# -биты" архитектуры, поэтому 32-битный процессор ' Регистры s будут иметь ширину 32 бита, а регистры 64-битного процессора будут иметь ширину 64 бита.
Из этого правила будут исключения, когда дело доходит до операций с плавающей запятой (для обработки двойной точности) или других инструкций SIMD (одиночная инструкция, множественные команды данных). ЦП загружает и сохраняет данные в основной памяти (ОЗУ) и из нее. Поскольку ЦП также использует эти регистры для вычисления адресов памяти (физической и виртуальной), объем памяти, который он может адресовать, также равен ширине его регистров. Есть несколько процессоров, которые обрабатывают вычисление адресов с помощью специальных расширенных регистров, но те, которые я бы назвал «после размышлений», добавляются после того, как инженеры осознают, что они им нужны.
В настоящее время 64-битные системы - это довольно много для адресации реальной физической памяти. Большинство 64-битных процессоров пропускают довольно много проводов, когда дело доходит до подключения процессора к памяти из-за практичности. Нет смысла тратить драгоценное пространство на материнской плате для прокладки проводов, у которых всегда будут нули. Не говоря уже о том, чтобы иметь максимальный объем ОЗУ с сегодняшней плотностью DIMM, потребуется 4 миллиарда слотов DIMM :)
Помимо увеличенного объема памяти, 64-битные процессоры предлагают более быстрое вычисление для целых чисел больше 2 ^ 32 . Раньше программисты (или компиляторы, которые также программируются программистами;) должны были имитировать наличие 64-битного регистра, занимая два 32-битных регистра и обрабатывая любые ситуации переполнения. Но на 64-битных процессорах это будет обрабатывать сам процессор.
Недостатком является то, что 64-битный ЦП (при всех равных) будет потреблять больше энергии, чем 32-битный ЦП, только из-за (примерно) вдвое большего количества необходимых схем. Однако на самом деле вы никогда не получите равного сравнения, потому что новые процессоры будут производиться с использованием более новых кремниевых процессов, которые имеют меньшую утечку мощности, позволяют втиснуть больше схем в тот же размер кристалла и т. Д. Но 64-разрядные архитектуры потребляют вдвое больше объем памяти. То, что когда-то считалось "уродливым" из-за переменной длины инструкций x86, теперь на самом деле является преимуществом по сравнению с архитектурами, использующими фиксированный размер инструкций.
позволяют втиснуть больше схем в кристалл того же размера и т. д. Но 64-битные архитектуры потребляют вдвое больше памяти. То, что когда-то считалось "уродливым" из-за переменной длины инструкций x86, теперь на самом деле является преимуществом по сравнению с архитектурами, использующими фиксированный размер инструкций. позволяют втиснуть больше схем в кристалл того же размера и т. д. Но 64-битные архитектуры потребляют вдвое больше памяти. То, что когда-то считалось "уродливым" из-за переменной длины инструкций x86, теперь на самом деле является преимуществом по сравнению с архитектурами, использующими фиксированный размер инструкций.Стоит отметить, что некоторые приложения (например, кодирование / декодирование и рендеринг мультимедиа) значительно (в 2 раза) повышают производительность при написании с полным использованием 64-разрядных.
См. 32-разрядные vs. 64-битные тесты для Ubuntu и Windows Vista
Ответ Мартина отличный. Просто чтобы добавить несколько дополнительных моментов ... поскольку вы упоминаете .NET, вы должны отметить, что CLI / JIT имеет некоторые различия между x86 и x64, с разными оптимизациями (например, хвостовой вызов) и некоторыми тонкими различиями в поведении расширенных такие вещи, как летучие
. Все это может повлиять на ваш код.
Кроме того, не весь код работает на x64. Все, что использует DirectX или определенные функции COM, может иметь проблемы. Не совсем функция производительности , но это важно знать.
(Я удалил "DirectX" - я мог бы говорить здесь чушь ... но просто: вам нужно проверить, что все, от чего вы зависите, стабильно на вашей целевой платформе)
Ответ Мартина в основном правильный и подробный.
Я подумал, что могу просто упомянуть, что все ограничения памяти - это ограничения виртуальной памяти для каждого приложения , а не ограничения для фактическая физическая память компьютера. Фактически, даже в 32-битных системах можно работать с более чем 4 Гб памяти в одном приложении, это просто требует больше работы, так как все они не могут быть доступны с использованием указателей одновременно. текст ссылки
Еще одна вещь, о которой не упоминалось, заключается в том, что разница между традиционным процессором x86 и x86-64 заключается не только в размере указателя, но и в наборе команд. Хотя указатели больше и занимают больше памяти (8 байт вместо 4), это компенсируется большим набором регистров (15 регистров общего назначения вместо 8, iirc),
Многие современные процессоры могут работать в двух режимах: 32-битном режиме и 64-битном режиме. В 32-битном режиме они могут получить доступ к памяти объемом до 4 ГБ; в 64-битном режиме они могут получить гораздо больше. Старые процессоры поддерживают только 32-битный режим.
Операционные системы выбрали использование процессоров в одном из следующих режимов: во время установки выбирается, будет ли процессор работать в 32-битном режиме или в 64-битном режиме. Несмотря на то, что процессор может продолжать работать в 64-битном режиме, переход с 32-битного на 64-битный потребует переустановки системы. Старые системы поддерживают только 32-битный режим.
Приложения также могут быть написаны (или скомпилированы для) 32-битного или 64-битного режима. Совместимость здесь более сложна, поскольку процессор, когда он работает в 64-битном режиме, может поддерживать 32-битные приложения в качестве функции эмуляции. Таким образом, в 64-битной операционной системе вы можете запускать 32-битные или 64-битные приложения. В 32-битной операционной системе вы можете запускать только 32-битные приложения.
Опять же, выбор размера в первую очередь зависит от объема основной памяти, к которой вы хотите получить доступ. 32-битные приложения часто ограничиваются 2 ГБ во многих системах, поскольку системе требуется некоторое адресное пространство для себя.
С точки зрения производительности (скорости) существенной разницы нет. 64-битные приложения могут работать немного медленнее, потому что они используют 64-битные указатели, поэтому им требуется больше обращений к памяти для данной операции. В то же время они могут быть немного быстрее, поскольку могут выполнять 64-битные целочисленные операции как одну инструкцию, тогда как 32-битные процессоры должны эмулировать их с помощью нескольких инструкций. Однако эти 64-битные целочисленные операции довольно редки.
Можно также задаться вопросом, какова стоимость запуска 32-битного приложения на 64-битном процессоре: на процессорах AMD64 и Intel64 этот режим эмуляции в основном аппаратный, поэтому нет реальной потери производительности при запуске 32-битного процессора. -битное приложение изначально. Это существенно отличается от Itanium, где 32-разрядные (x86) приложения эмулируются очень плохо.
Я думаю, что это нормально - потому что это не похоже на TruncateToSize
, реально заменяемый компонент. Это метод, который когда-либо должен делать только одну вещь.
Вам не нужно иметь возможность имитировать все - только службы, которые либо нарушают модульное тестирование (доступ к файлам и т. Д.), Либо который вы хотите протестировать с точки зрения реальных зависимостей. Если бы вы использовали его для аутентификации или чего-то в этом роде, это было бы совсем другое дело ... но вы просто выполняете прямую строковую операцию, которая не имеет абсолютно никаких настроек, различных вариантов реализации и т.д. - нет смысла рассматривать это как зависимость в обычном смысле.
Другими словами: если TruncateToSize
был подлинным членом String
, Вы бы даже дважды подумали, прежде чем использовать его? Вы также пытаетесь имитировать целочисленную арифметику, вводя IInt32Adder
и т. Д.? Конечно нет. Это то же самое, только вы предоставляете реализацию. Модульное тестирование из TruncateToSize
и не беспокойтесь об этом.
Только что заметил комментарии Ченса по этому поводу. В любом случае, без образования в области компьютерной науки, да, книги по компьютерной организации и архитектуре в лучшем случае будет трудно понять.
1111111111111111
в двоичном виде (= 2 0 +2 1 +2 2 ... + 2 ] 15 = 2 16 -1) 1111
, зарезервированы для использования в будущем» Подумайте об общей компьютерной памяти как о массивной карточке бинго с миллиардами квадратов. Для адресации любого отдельного квадрата на доске существует схема обозначения каждой строки и столбца B-5, I-12, O-52 и т. Д.
Если на карточке достаточно квадратов, в конечном итоге у вас закончится буквы, поэтому вам нужно будет начать повторно использовать больше букв и писать более крупные числа, чтобы и дальше иметь возможность однозначно адресовать каждый квадрат.
Прежде чем вы это узнаете, диктор извергает досадно огромные цифры и комбинации букв, чтобы вы знали, какой квадрат отметить на вашей 10-миллиардной квадратной карте. BAZC500000, IAAA12000000, OAAAAAA523111221
Счетчик битов компьютера определяет предел сложности букв и цифр для адресации любого конкретного квадрата.
32-битное значение означает, что если карта больше 2 ^ 32 квадратов, компьютер не имеет достаточно проводов и транзисторов, чтобы позволить ему однозначно физически адресовать любой конкретный квадрат, необходимый для чтения значения или записи нового значения в указанное место памяти.
64-битные компьютеры могут индивидуально адресовать массивные 2 ^ 64 квадрата. .. но для этого каждому квадрату нужно намного больше букв и цифр, чтобы каждый квадрат имел свой уникальный адрес. Вот почему 64-битным компьютерам требуется больше памяти.
Другими распространенными примерами ограничений адресации являются местные телефонные номера. Обычно это 7-значные числа 111-2222 или переформатируются в число 1,112,222 .. что происходит, когда более 9 999 999 человек хотят иметь свои собственные номера телефонов? Вы добавляете коды городов и стран, и ваш номер телефона увеличивается с 7 цифр до 10–11, занимая больше места.
Если вы знакомы с надвигающейся нехваткой IPv4, это та же проблема. Адреса IPv4 32-битные, что означает наличие возможны только 2 ^ 32 (~ 4 миллиарда) уникальных IP-адресов, и сегодня живёт намного больше людей.
Во всех упомянутых мною схемах (компьютеры, номера телефонов, IPv4-адреса) есть накладные расходы, в которых определенные части зарезервированы для организационных целей, поэтому полезное пространство намного меньше.
Обещание производительности для 64-разрядного мира заключается в том, что вместо отправки 4 байтов за раз (ABCD) 64-разрядный компьютер может отправлять 8 байтов за раз (ABCDEFGH), поэтому алфавит переносится между различными областями памяти. до двух раз быстрее, чем 32-разрядный компьютер. Также есть преимущества для некоторых приложений, которые просто работают быстрее, когда у них есть больше памяти, которую они могут использовать.
В реальном мире 64-битные настольные процессоры Intel и др. На самом деле не являются настоящими 64-битными процессорами и по-прежнему ограничены 32 -биты для нескольких типов операций, поэтому в реальном мире производительность между 32-битными и 64-битными приложениями незначительна. 64-битный режим дает вам больше аппаратных регистров для работы, что действительно улучшает производительность, но использование большего объема памяти на «фальшивом» 64-битном процессоре также может ухудшить производительность в некоторых областях, так что обычно это промывание.
Давайте попробуем ответить на этот вопрос, посмотрев на людей по сравнению с компьютерами ; Надеюсь, это прольет свет на вас:
Итак, здесь у нас есть фундаментальный Разница между людьми и компьютерами: чтобы вызывать информацию из памяти, компьютерам необходимо дать адрес , тогда как людям этого не сделать. (В некотором смысле можно было бы сказать, что «ваш номер телефона» - это адрес, потому что он дает иную информацию, чем «ваш день рождения», но это уже другой разговор.)
Это относится и к компьютерам, но поскольку они являются двоичными машинами для десятичных машин добавление дополнительной двоичной цифры ( бит ) увеличивает диапазон только в 2 .
Диапазоны адресации:Все это означает, что 64-битный компьютер может хранить и извлекать гораздо больше информации, чем 32-битный компьютер. Для большинства пользователей это не имеет большого значения, потому что такие вещи, как просмотр веб-страниц, проверка электронной почты и игра в пасьянс - все это удобно в пределах 32-битной адресации. Преимущество 64-битной версии действительно проявляется в областях, где у вас есть много данных, которые компьютер должен будет обработать. Цифровая обработка сигналов, гигапиксельная фотография и продвинутые 3D-игры - все это области, в которых обработка огромных объемов данных получит большой импульс в 64-битной среде.
Простой ответ для объяснения диапазона адресуемой памяти с 32-битными процессорами:
Предположим, у вас есть только 3-значные числа, которые можно построить, поэтому максимальное число u может увеличиваться до 999. Диапазон чисел это (0 - 999). У вас есть только 1000 чисел для использования.
Но если u разрешено иметь 6-значные числа, то максимальное число, которое вы можете построить, будет 999999. Теперь диапазон составляет (0 - 999999). Итак, теперь у вас есть 1 миллион чисел, которые вы можете использовать.
Точно так же вы можете иметь больше битов в процессоре, больший набор адресов (числа в предыдущем примере), которые вы можете создать и в конечном итоге использовать для хранения данных и т. Д.
Было бы интересно прочитать все, что попроще!
-AD.
У меня есть замечательный ответ на этот вопрос, но он не умещается в этом блоке ответов .... Простой ответ заключается в том, что для вашей программы нужно получить байт из памяти , ему нужен адрес. В 32-битных процессорах адрес памяти каждого байта хранится в 32-битном (беззнаковом) целом числе, максимальное значение которого составляет 4 ГБ. Когда вы используете 64-битный процессор, адрес памяти является 64-битным целым числом, что дает вам примерно 1,84467441 × 10 ^ 19 возможных адресов памяти. Этого действительно должно хватить, если вы новичок в программировании. Вам действительно следует сосредоточиться больше на обучении программированию, чем на внутренней работе вашего процессора и почему вы не можете получить доступ к более чем 4 ГБ ОЗУ на 32-битном процессоре.
Это очень простое объяснение, учитывая, что все вышесказанное довольно подробно описано.
32-битное значение относится к регистрам. Регистры - это места для хранения данных, и все программы работают, манипулируя этими вещами. Ассемблер работает непосредственно с ними (и поэтому люди часто хотят программировать на ассемблере).
32-битный означает, что базовый набор регистров может содержать 32-битную информацию. 64-битная версия означает, что неудивительно, 64-битную информацию.
Почему это может сделать программы быстрее? Потому что вы можете быстрее выполнять более крупные операции. Между прочим, это сделает быстрее только определенные типы программ. Игры, как правило, могут воспользоваться большим преимуществом оптимизации для каждого процессора из-за их сложных математических операций (и, следовательно, использования регистров).
Но забавно, как уже упоминалось, у них есть много других «вещей» которые в любом случае позволяют выполнять более крупные операции. SSE, SSE2 и т. Д. Будут иметь 64-битные регистры и 128-битные регистры даже в «32-битной» системе.
Повышенная способность адресовать память напрямую говорит об увеличении размера базового регистра на основе (I Представьте себе) Специальная система адресации памяти Windows.
Надеюсь, что это немного поможет. другие плакаты намного точнее меня, я просто пытаюсь объяснить очень просто (помогает то, что я очень мало знаю :)
Не думаю, что я часто встречал слово «регистр» в предыдущих ответах. Цифровой компьютер - это набор регистров с логикой для арифметики и памятью для хранения данных и программ.
Но сначала ... цифровые компьютеры используют двоичное представление чисел, потому что двоичные цифры («биты») 0 и 1 являются легко представлены двумя состояниями (вкл. / выкл.) переключателя. Ранние компьютеры использовали электромеханические переключатели; современные компьютеры используют транзисторы, потому что они меньше и быстрее. Намного меньше и намного быстрее.
Внутри ЦП переключатели сгруппированы вместе в регистры конечной длины, и операции обычно выполняются над целыми регистрами: например, добавить этот регистр к этому и так далее. Как и следовало ожидать, 32-битный процессор имеет регистры длиной 32 бита. Я здесь упрощаю, но терпите меня.
Имеет смысл организовать память компьютера в виде ряда «ячеек», каждая из которых содержит такое же количество битов, что и регистр ЦП: например, загрузить этот регистр из этого место в памяти. На самом деле, если мы думаем о памяти как байтов , это всего лишь удобная часть регистра, и мы можем загрузить регистр из ряда ячеек памяти (1, 2, 4, 8).
Как транзисторы становятся меньше, дополнительная логика для более сложной арифметики может быть реализована в ограниченном пространстве компьютерного чипа. Площадь CPU всегда в цене.
Но с улучшением производства микросхем можно надежно изготавливать больше транзисторов на микросхемах чуть большего размера. Регистры могут быть длиннее, а пути между ними - шире.
Когда регистры, которые содержат адреса ячеек памяти, длиннее, они адресуют более крупные блоки памяти, и данные могут обрабатываться большими блоками. В сочетании с более сложной арифметической логикой все выполняется быстрее.
И разве это не то, чего мы все добиваемся?
Позвольте мне рассказать вам историю Бинвилля, маленького городка в глуши. К Бинвиллю вела одна дорога. Каждый, кто приезжал в Бинвиль или покидал его, должен был ехать по этой дороге. Но когда вы подходили к городу, там была развилка. Вы могли пойти либо налево, либо направо.
Фактически, у каждой дороги была развилка, за исключением дорог, ведущих к самим домам. Эти дороги просто заканчивались у дома. Ни одна из дорог не имела названий; им не нужны имена благодаря остроумной схеме адресации, созданной Комиссией по планированию Бинвилля. Вот карта Бинвилля с дорогами и домами:
------- [] 00
/
------
/ \
/ ------- [] 01
-----
\ ------- [] 10
\ /
------
\
------- [] 11
Как видите, у каждого дома есть двузначный адрес. Одного этого адреса достаточно, чтобы: а) однозначно идентифицировать каждый дом (нет повторов) и б) рассказать, как туда добраться. Видите ли, по городу легко передвигаться. Каждая вилка помечена нулем или единицей, которые Комиссия по планированию называет трассировщиком пересечений Бинвилля, или для краткости битом . Приближаясь к первой вилке, посмотрите на первый бит адреса. Если это ноль, идите налево; если это один, иди направо. Затем посмотрите на вторую цифру, когда дойдете до второй развилки, двигаясь влево или вправо, в зависимости от ситуации.
Допустим, вы хотите навестить своего друга, который живет в Бинвилле. Она говорит, что живет в доме 10. Когда доберетесь до первой развилки Бинвилля, идите направо (1). Затем на второй развилке поверните налево (0). Ты здесь!
Бинвиль существовал в таком виде несколько лет, но начали ходить слухи о его идиллической обстановке, великолепной парковой системе и щедрой медицинской помощи. (В конце концов, если вам не нужно тратить деньги на уличные знаки, вы можете использовать их для улучшения). Но возникла проблема. Имея всего два бита, схема адресации была ограничена четырьмя домами!
Итак, Комиссия по планированию собралась вместе и разработала план: они добавят бит к каждому адресу, тем самым удвоив количество домов. Для реализации плана они построят новую развилку на окраине города, и все получат новые адреса. Вот новая карта, показывающая новую развилку, ведущую в город, и новую часть Бинвилля:
------- [] 000
/
------
/ \
/ ------- [] 001
----- Old Binville
/ \ ------- [] 010
/ \ /
/ ------
/ \
/ ------- [] 011
--
\ ------- 100
\ /
\ ------
\ / \
\ / ------- [] 101
----- New Binville (some homes not built yet)
\ ------- 110
\ /
------
\
------- 111
Вы обратили внимание, что все в первоначальной части Бинвилля просто добавляли ноль в начале своего адреса? Новый бит представляет собой построенный новый перекресток. Когда количество бит увеличивается на единицу, количество адресов удваивается. Горожане всегда знали максимальный размер своего города: все, что им нужно было сделать, это вычислить значение двойки в степени числа битов. С тремя битами у них могло бы быть 2 3 = 8 домов.
Прошло несколько лет, и Бинвиль снова был заполнен до отказа. Больше людей хотели переехать, поэтому был добавлен еще один участок (вместе с необходимым перекрестком), увеличив размер города вдвое до шестнадцати домов. Затем еще один бит, и еще один, и еще ... Вскоре адреса Бинвилля стали шестнадцатью битами, что позволило разместить до 2 16 (16,384) домов, но этого было недостаточно. Люди продолжали приходить и приходить!
Итак, Комиссия по Планированию решила решить проблему раз и навсегда: они перескочили до 32 бит. Имея достаточное количество адресов для более чем четырех миллиардов домов (2 32 ), наверняка этого будет достаточно!
И это было ... около двадцати пяти лет, когда Бинвилл уже не был маленьким городком в в глуши. Теперь это был крупный мегаполис. Фактически, она становилась такой же большой, как целая нация с миллиардами жителей. Но парки по-прежнему были хорошими, и у всех было отличное медицинское обслуживание, поэтому население продолжало расти.
Столкнувшись с постоянно растущим населением, Комиссия по планированию снова собралась вместе и предложила еще одно расширение города. На этот раз они будут использовать 64 бита. Вы знаете, сколько домов может поместиться в черте города Бинвилл сейчас? Правильно: 18,446,744,073,709,551,616. Это число настолько велико, что мы могли бы заселить около двух миллиардов Земель и дать каждому свой собственный адрес.
Использование 64 бит не было панацеей от всех их проблем с адресацией. Адреса занимают в два раза больше места для записи, чем старые 32-битные адреса. Хуже того, некоторые граждане еще не обновили свои адреса, чтобы использовать новый 64-битный формат, поэтому они были вынуждены жить в отгороженной части города, зарезервированной специально для тех, кто все еще использует 32-битные адреса. Но это было нормально: люди, использующие 32 бита, имели доступ к более чем достаточной части города, чтобы удовлетворить свои потребности. Они пока не чувствовали необходимости что-то менять.
Будет ли достаточно 64 бит? Кто знает в это время,
Для лиц без CS. 64-разрядная версия будет работать лучше для вычислений (всех видов), это будет хорошо, также она позволит вам иметь больше оперативной памяти.
Также, если у вас ограниченная оперативная память (например, в VPS или выделенном сервере с малой ОЗУ) - выберите 32-разрядную. , сервисы там будут есть меньше оперативной памяти.