文字列または文字列(文字列)は数字、文字、アンダースコアからなる文字列です。一般に、S = "A1A2···"(N> = 0)と呼ばれます。これは、プログラミング言語はテキストのデータ型を示しています。プログラミングでは、文字列(string)は、シンボル又はシンボル列として連続数値列(文字列)またはバイナリ数字列(二進数字の文字列)です。
文字列型は、すべての後に、すべてのコーダは、VaRのSTR1 =オーバーの「Hello World」からのもので、何ら見知らぬ人ではありません。
しかし、それは実際にはそうですか?私に聞いて説明します。
まず、考えます
文字列を使用するプロセスにおけるスウィフトの開発は、次の問題について考えていますか?
- どのくらいのメモリ文字列変数の職業?
- 文字列str1は、基盤となるストレージのSTR2は、違いは何ですか?
- スプライシング操作STR1、STR2、STR1、STR2は、ストレージの基礎となる場合はどう変わりますか?
あなたは正確にこれらの質問に答えることができれば、それは、基礎となるストレージ・メカニズムスウィフト文字列はかなり意識していることを示しています。
第二に、どのくらいのメモリ文字列変数の職業?
方法1:MemoryLayout
まず、スウィフトを助けることができるテストはMemoryLayoutが来ます
方法2:アセンブラ
また、我々はまた、強い下でアシスタントを分析することができます - アセンブリ言語、文字列の基盤となるストレージで覗いて
- 実際、他の文法的分析では、基盤となるシステムライブラリは、あなたがアセンブリ言語を利用することができます
- そのような多形性の原則、下の列挙などの基礎となる一般的な原理は、Array、
また、だけでなくスウィフト、C、C ++、OC基礎となる分析、まだアセンブリ言語を利用することができます
- あなたはコードの各行が有効で、書き込みの後、最終的に機械語命令(0と1)に有効にする必要があります
- アセンブリ命令を有する機械命令が1に一つであり、各マシン命令は、対応するアセンブリ命令に翻訳することができます
- アセンブリ命令は、CPUの既知の特定がやってマシン命令と同等のものを読むことができ、読むことができます(操作を登録するものを、メモリ操作の一部)
- このチュートリアルのコードは、Macのコマンドライン上で直接実行されている(CommandLineTools)プロジェクト
- このように示すアセンブリコードフォーマットは、AT&T X64、本物ではない機械IOSのARMアセンブリデバイスに基づいてコンパイルされ
- 実際には、いくつかの手順については、異なるアセンブリのようなものではなく、同じ名前の間には大きな類似性があります
MicrosoftのVisual Studioのと同じように、Xcodeのは非常に便利な分解機能を内蔵しており、簡単に次の手順を実行し、それぞれに組立説明書、解体オープンインタフェースに対応するコードを表示することができます
- デバッグコードの行を必要としているブレークポイントの付いた(逆アセンブルインターフェースは、ブレークポイントデバッグ状態に表示されます)
- 菜单: `DEBUG`>`デバッグWorkflow`> `常に表示Disassembly`
- `Assembly`は、コンパイルを翻訳し、` Disassembly`逆アセンブル翻訳しました
- プログラムを実行し、逆アセンブルインタフェースを参照してください
あなたは完全な経験を分解した場合、16のコンパイルによると、17行が出て洗練することができ、文字列の占有率は16のバイトです
- それはRAXを使用するため、格納し、文字列strとRAXの内容を登録RDX、RDXは8バイトであります
コンテンツのコンパイルはあまりにも多く、ための時間との関係の長さの、記事はアセンブリ命令の一つ一つを詳細に説明していませんが、より多くのコンパイルの重要性を説明することです。
第三に、基礎となるの保存された文字列
スヌープメモリ
以前、私は変数メモリガジェットスウィフトをスパイすることができ書います。https://github.com/CoderMJLee/Mems
- 今、まさにデータが保存されている16バイトの文字列をてこのようにそれを使用します
- `Mems.memStr(ofVal:)`デフォルト表示メモリへのデータの8バイトのセットに従って
表示メモリに1バイトのデータのセットに従って.one`: - `アラインメントパラメータを渡します
文字「0」 - 「9」ASCII値0x30を〜ます。0x39は、慎重に最初の16バイトのデータをSTR1を観察し、あなたは何を見つけますか?
- 直接16バイトのASCII値に保存されているSTR1すべての文字で
- 文字の数は0xaの最後の1バイト0xea、だけでなく、10文字の合計であります
スプライス
の「ABCDE」をステッチするときにはSTR1で見つけることができます
- 最終的にはASCII値「0123456789ABCDE」15の文字がSTR1の16バイトに格納されています
- 文字の数最後の1バイト0xEFというにおける0xFのが、また、15文字の合計であります
- あなたが見ることができ、現在いっぱいである場合、および文字と、それをステッチすることを16バイトを持っていますか?
あなたが見ることができる、非常に大きな変化は、各文字のASCII値がなくなって行われたデータ保存STR1、
- まさにそれの意味は何16バイトがあることは?
- ASCII値のすべての文字(「F」と「0」〜「9」、「A」)とどこへ行くそれを維持?
その他の例
あなたが(ないステッチの前に)初期化時間を開始した場合、文字列の内容は、15文字を超えているのですか?
私は、あなたが結果を推測することができると信じて
- これは16バイトで、任意の文字が表示されるのないASCII値はありません
- そして、 `行27バイト16が区別されるとそれをstr1`
- その内容が文字列「0123456789ABCDEF」ですが、
もしstr2のスプライシング操作
見つけるのは難しいことではありません。その後、16のバイトを再度変更STR2、27行 `とstr1`は少し似ています
これらの疑問を解決する方法は?
これらの質問の上に、データメモリのプリントアウトを見ては解決できませんが、[使用することができます!!!コンパイル!!!]組み立て説明書を分析し、解決するために、すぐに理由は記事の限られたスペースのため、結論に来て、通常はあまりにも忙しい作業、私は問題を記録するプロセスの詳細な分析を置くと、ビデオ、興味のある友人の2時間以上までになってきましたそれは、鑑賞の1.5〜2倍の速度かもしれ
- リンクします。https://pan.baidu.com/s/1AkS3K1ZKP8zyxhlhLRaBkA
- 抽出コード:kzrk
- コンパイルのためのビデオ根拠は友人ではない、それは少し難しいかもしれ、それは地味な時間見を選ぶのがベストです
- ビデオを見た後、私はあなたが言語のコンパイルの正確大切さを感じることを願って、常にハイレベル言語、シンタックスシュガーレベルでふけるで書かれたコードで停止しません。
第四に、そして最終的に
最後に、私は1つのより多くの事を言う:コンパイルは、あなたがこの記事では、基礎となるスヌープ文字列言っもたらす価値よりもはるかに与えることができ、あなたのキャリアへの影響は(あまりにもデータ構造とアルゴリズムの基礎)間違いの生涯のプログラムであり、たとえば、ソフトウェアの楽しさ、ゲームやその他のプラグインで、私は持っていたクラックすることができます[コンパイル\ C ++]書かれたプラグインゲーム:https://github.com/CoderMJLee/SeemygoPVZCheater
アセンブリ言語は、機械語プログラミング言語に最も近いです。機械語は、コンピュータ操作の本質である場合には、アセンブリ言語は、言語の本質に最も近いです。アセンブリ言語は、あなたは、高レベル言語コードを修正することで効率を向上させることができるアルゴリズムを向上させることができ、あなたは高レベルの言語のより良い理解、コンパイルが学ぶことができます。
それは、すべてのプログラミング言語で最も重要な部分の文字列の一つであるが、それはフィールドの唯一のこのコーナーですが、プログラミングの分野では。プログラマにとって、唯一の定数探査は、この分野での垂直方向と水平方向の移動に多くの技術を学ぶために。
これらは、より多くの福祉を送って、友達に言って、私の技術を共有している何かの感覚を学びたいです!!さらにテクニカルアップグレード攻略のために、マイクロ文字を追加してください:19950277730を、ここで私はあなたのために答える準備ができています。多くの無料動画や、iOSの、データ構造とアルゴリズムなどの学習教材は、スキルをプログラミングする、があります。