Fun с вами составить мастер строку, быстрее автомобиль!

Строки или строка (String) представляет собой строку символов , состоящих из цифр, букв, знаков подчеркивания. Обычно упоминается как S = "a1a2 ···" ( п> = 0). Это язык программирования указывает тип данных текста. В программировании, строка (строка) является символ или непрерывная числовая последовательность, такими как строка символов (строка символов) или двоичной цифровой строка (строка двоичных цифр).
строковый типа вы не чужие, в конце концов, каждый кодер из вара str1 = «Hello World» над.
Но это на самом деле просто так? Послушай меня объяснить.
Во- первых, мышление
в Swift разработан с использованием строки в процессе, независимо от того , вы думали о следующих вопросах?
Сколько памяти для переменной строки?
Строка str1, str2 Базового хранения чем разница?
Fun с вами составить мастер строку, быстрее автомобиль!
Если сплайсинг операция str1, str2, str1, str2 , лежащие в основе хранения Что изменится?
Fun с вами составить мастер строку, быстрее автомобиль!
Если вы можете ответить на эти вопросы точно, это показывает , лежащий в основе механизм хранения Swift строка вполне осознает.
Во- вторых, сколько памяти переменной оккупации строки?
Метод 1: MemoryLayout
Прежде всего, можно использовать Swift приходит MemoryLayout на тест
Fun с вами составить мастер строку, быстрее автомобиль!
Метод 2: Компиляция
Кроме того, мы можем также анализировать помощник С сильным Дном - ассемблером, быстрый взгляд на основную строке хранения
факта, другой грамматический анализ, лежащая в основе библиотека системы, вы можете использовать ассемблер ,
такие как основополагающий принцип полиморфизма, общие принципы, Array, перечень базового и т.д.
кроме того, не только Swift, C, C ++, OC , лежащий в основе анализа, все еще может помочь ассемблере
, в конце концов, вы пишете каждую строку кода действительно, в конечном счете необходимо включить в машинные инструкции (0 и 1)
И машинное это один к одному соответствию с инструкцией по сборке, каждая команда может быть переведена на машинно сборочном соответствующих им
можно прочитать ассемблер инструкции, инструкция машины может прочитать эквивалент, знать конкретный процессор делает (управляемый Какие регистры, работающие кусок памяти)
код для этого урока непосредственно запустить из командной строки Mac (CommandLineTools) проекта ,
таким образом , показывая код сборки основан на AT & T в формате X64 ассемблере, не IOS реального машинного оборудования ARM ассемблере
на самом деле различных видов есть много общего между сборки, но не то же самое имя для некоторых команд ,
таких как Microsoft Visual Studio, Xcode построил очень удобную разборку функцию, вы можете легко просматривать каждый код , соответствующий инструкции по сборке, откройте анти интерфейс шага компиляции следующим образом
отмечены точками останова в необходимости строки для отладки коды (разборка интерфейса будет отображаться в отладке состоянии точки останова)
меню: отладки> отладка Workflow> Всегда показывать разборку
собрания переведенного сборник, разборка переведенной разборки
Fun с вами составить мастер строку, быстрее автомобиль!
работы программы см разобрать интерфейс ,
Fun с вами составить мастер строку, быстрее автомобиль!
если разбирать весь опыт, в соответствии с подразделом Компиляция линия 16 и 17 будут взвешивание, String размещение составляет 16 байт ,
потому что он взял RAX, RDX регистр содержит содержимое строки строки, и RAX, RDX является 8-байтовым
сборником содержания слишком много, из-за времени и продолжительности отношений, статья не будет иметь каждый из сборки инструкции объяснить подробно, больше , чтобы проиллюстрировать важность компиляции.
В- третьих, строки , лежащие в основе хранения
Snoop памяти
после того, как я написал переменная памяти может Шпион гаджеты Swift:https://github.com/CoderMJLee/Mems
теперь использовать его , чтобы вырвать строку 16 байт , который, какие именно данные хранятся
Mems.memStr (ofVal :) По умолчанию в соответствии с набором из 8 байтов памяти на витрине данные
выравнивания параметров передачи: .one в соответствии с набором данных из памяти 1 байт для отображения
Fun с вами составить мастер строку, быстрее автомобиль!
символа «0» - «9» значения ASCII 0x30 ~ 0x39, str1 внимательно наблюдать начальные 16 байт данных, что вы найдете ?
Он непосредственно к значению ASCII хранится в 16 байтах всех символов str1
это количество символов в последних 1 байтах 0xea в 0xA, но и в общей сложности 10 символов
шовных
Fun с вами составить мастер строку, быстрее автомобиль!
можно найти на str1 при сшивании «ABCDE» из
него конечная это значение ASCII «0123456789ABCDE» пятнадцать символов хранятся в 16 байт str1
это количество символов в последнем 1 байт 0xEF в 0xF, но также и в общей сложности 15 символов
можно видеть, ток 16 байты полны уже, что если символ , а затем шить его?
Fun с вами составить мастер строку, быстрее автомобиль!
Вы можете видеть, данные , хранящиеся str1 , которые имели место очень большие изменения, ASCII значения пропавших, каждый персонаж ,
что есть 16-байт Что же такое смысл этого?
Все символы ( '0' ~ '9' , 'A' до 'F' ) Значение ASCII и сохранить его, куда идти?
Другие ситуации
Если начать инициализацию времени (не раньше , чем сшивание), содержимое строки более 15 символов?
Fun с вами составить мастер строку, быстрее автомобиль!
Я считаю , что вы можете угадать результат
Этот 16-байтовое значение ASCII любого характера , которые не произошло ,
и что с 16 байт str1 линии 27 дифференцирован ,
хотя их содержание струнной «0123456789abcdef»
Если операция str2 сплайсинг
Fun с вами составить мастер строку, быстрее автомобиль!
не сложно Было установлено: в это время str2 16 байт снова изменились, с str1 линией 27 несколько напоминает ,
как решить эти вопросы?
Над этими вопросами, посмотрите на печать из памяти данных не может быть решена, но можно использовать [! ! ! Компиляция! ! ! ] Для того, чтобы решить, анализировать сборочные инструкции, немедленно пришел к выводу, из-за ограниченного объема статьи, как правило , слишком заняты работой, я поставил подробный анализ процесса записи вопрос стал до более чем два часа видео, заинтересованных друзей вы можете использовать 1,5 до 2 раз скорости просмотра
ссылок: https://pan.baidu.com/s/1AkS3K1ZKP8zyxhlhLRaBkA
код извлечения: kzrk
видео компиляции нет оснований для друга, это может быть немного трудно, то лучше выбрать трезвое время чтобы смотреть
после просмотра видео, я надеюсь , что вы можете чувствовать себя именно важность языка компиляции, не всегда останавливаются на коде , написанном на языке высокого уровня, побалуйте синтаксический уровень сахара.
В- четвертых, и , наконец ,
люди часто думают , ассемблере область применения очень мала, ее значение и пренебрежение. На самом деле, язык ассемблера для каждого человека хочет изучать компьютерные науки и технологии очень важны, и что не может не выучить язык.
Компиляция дают значение , которое вы принести гораздо больше , чем в нижней части этой статьи говорит сыщик строка, влияние программы на вашей карьере, безусловно, время жизни (структур данных и алгоритмов, тоже). После компиляции узнать, когда вы используете язык программирования высокого уровня будет более понимания машины , в конце концов делать то , что вы можете улучшить алгоритм может повысить эффективность работы путем изменения кода на языке высокого уровня.
Развитие ИТ - технологий с каждым днем, новыми технологиями, имеет хорошую способность к обучению, приобретать новые знания своевременно, в любое время дополнять и обогащать себя, стала основой конкурентоспособностью профессиональных программистов развития.
Как программист, но и мы должны постоянно обогащать свою базу знаний. Мы знаем , что - то, как белый круг снаружи круга он является темным неизвестным миром. Когда более, чем больше круг, темная часть к контакту. Мы только продолжать учиться, чтобы сломать больше тьмы, узнать больше света.
Если вы хотите , чтобы улучшить себя, узнать больше о программировании навыков , таких как IOS, структуры данных и алгоритмы, есть бесплатные учебные материалы, пожалуйста , добавьте микро письмо: 19950277730 для более технических читов обновления. Это не только малое , как мыслящие партнеры, более многочисленные бесплатные навыки программирования, обучение видео и информация, плюс технология микро-канала , чтобы научиться обсуждать! !

рекомендация

отblog.51cto.com/14606540/2448956