つまり、LEの方はデータの後ろからメモリに格納して行き、BEはデータの並び順にメモリに格納して行く。人間から見れば、データが正順に格納されるBEの方が分かりやすいが、コンピュータ的にはLEの方が処理しやすいらしい。 バイトオーダーの問題 次に、上に書いたLEのメモリ番地0〜4の内容をそのままファイルに書き出したとしよう(つまりデータの保存)。ファイルの内容は「EFCD3412」となるはずだ。 今度は、そのファイルからメモリ内容を復元する事を考える(データの読み込み)。 LEの環境で作ったファイルなのだから、LE環境で読み込めば、当然元のデータである「0x1234CDEF」が得られるが、BE環境ではそうは行かない。現在のメモリ内でのデータの並びは「EF CD 34 12」であり、BEはデータを正順に格納して行く事から、この並びから得られるデータは「0xEFCD3412」となってしまう。 この
gdbとは gdbは The GNU Project Debuggerのことです。 デバッグのためのツールです。 プログラムがエラー終了するが、どこが悪いのかわからない… というような時に便利です。 準備 デバッグ対象プログラムのコンパイル コンパイルしたプログラムにデバッグ情報を含めておくと、 デバッガでプログラムのソースを参照できるなど、 デバッグが非常に楽になります。 gccやUNIXのccでは、コンパイル時に「-g」オプションを付加すると デバッグ情報を生成します。 最適化オプション「-O」と デバッグオプション「-g」の両方は 同時に指定できないコンパイラもあるので注意してください。 gccは同時に指摘できます。 なお、FreeBSDやRedHat Linuxのccの正体はgccなので、 「-O」と「-g」を同時に指定できます。 makeでコンパイルしている場合には、 「-g」オ
トップ Emacs Linuxメモ Cygwinメモ gnuplot+ リンク アクセス状況 最新の20件2008-03-30zhangpengc 2007-12-30simple 2007-12-14gongyesheji 2007-10-31Emacs/etc FrontPage Cygwinメモ/PostgreSQL 2006-03-03gnuplot3.8日本語化・機能拡張パッチ 2005-05-20InterWikiName 2004-04-20リンク 2004-04-16Cygwinメモ/sshd 2004-04-15Cygwinメモ/xinetd Cygwinメモ/init Linuxメモ/bash Emacs/c-mode 2004-04-03RenameLog MenuBar アクセス状況 Emacs 2004-04-02Emacs/カーソル移動 Linuxメモ/YaTe
日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
再入不可能な関数を C で実装する 一度実行したら二度と中身を実行できなくなる再入不可能な関数を C で実装してみます。通常、このような関数はシングルトンなどの静的なデータの初期化に使いますが、ここではデータについては考えないことにします。 static 変数をフラグに使う まずは最も単純な方法から見ていきます。次の関数は static 変数をフラグに使って再入を防いでいます。厳密に言えば関数そのものには入ってしまっていますが、ここで気にしないことにします。 void once(void) { static int entered; // 最初は 0 if (entered == 1) { // すでに入ったことがある場合は return; // すぐ出る } entered = 1; // 初回の場合のみ、何かを実行する } この方法はシングルスレッドのプログラムではうまく動きますが、マ
今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlやC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ
Snow Leopard には Grand Central Dispatch (以下 GCD) という機能がある。これは C と当然 C++, Objective-C, Objective-C++ にクロージャのようなものを追加し、マルチコアな CPU における計算の並列実行を簡単に書けるようにするらしい。 私は並列化には全然詳しくないのだけど、クロージャのようなものは気になるので調べてみた。 Block Apple Developer Connection にある Introducing Blocks and Grand Central Dispatch は GCD の全体像をコードを交えつつわかりやすく説明している。この “blocks” というのがクロージャのようなものだ。 Blocks are similar to — but far more powerful than — tr
Twitter上で、@alohakun が言及していた GDB の reverse debugging の機能を使ってみました。 GDB にトレースと逆実行機能入ったのか。 http://www.gnu.org/software/gdb/news/reversible.html http://twitter.com/alohakun/status/4481139191 まずは簡単な使い方を説明したあとに、インストール方法を説明します。 こんなときに便利 「変なこと」が起きている大体の場所がわかっているとき デバッグ中に、大体どこで変なことが起きているかはわかっているけど、細かい場所は特定できていないとき、reverse debuggingが効果を発揮します。 GDBでステップ実行をしていて、「しまった!行きすぎた!」という経験はよくあると思います。こういうとき、今まではプログラムの実行を最
試行錯誤してインラインアセンブラのチュートリアルが完成した。 やったぞ,なんだか分からないけど俺はやったんだ! GAS構文の概要 まず,GAS のシンタックスについて見ていく。GAS は標準で AT&T 記法を使用しているが,.intel_syntax ディレクティブにより intel 記法を使うこともできる。忌々しい AT&T 記法とはおさらばだ! intel 記法を使うには,アセンブラファイルの先頭に次の行を置く。 .intel_syntax noprefix また,C ファイルから作成される GAS を intel 記法で出力させる(又は,インラインアセンブラで intel 記法を使う場合)には GCC にこんなオプションを加えてやる: gcc -masm=intel ... intel 記法が手に入りテンションが上がってきたところで,さっそく構文の説明を始めることにしよう。一応注意
gccのコマンドラインオプションを調べる時にはいままではWEB上のマニュアルを見ていました。 http://gcc.gnu.org/onlinedocs/ 特に、ちょっとオプションのスペルを確認したい時などはコマンドラインオプションのサマリーのページでブラウザのページ内検索の機能で探していました。 でもここに書いてないオプションもあったりします。 例えば、ソースコードのcharsetを指定するオプションを探したのですがマニュアルに見当たりません。そのためにgcc本体のソースコードを検索したりしたのですが、もっと簡単な方法を見つけました。 $gcc -v --help これでgccとgccから呼びだされるcc1, cc1plus, as, ldなどのコマンドラインオプションの簡単な説明が出力されます。 大量にでる(1000行以上)ので一度ファイルに落してエディタなどでみるといいでしょう。 $
フルスクラッチっていうのは、既存のOSの上に書くとかでは無くて、言ってしまえばOSから作った様なものです。 結果から言うと、Webブラウザでアクセスすると苺ましまろのリンクが出るとかっていう程度のものは作れました。 3-wayhandshake出来ますし、FINも裁けます。まぁ"何とか動く"程度にして満足したので止めましたけど... 今度の自分の為のメモとして。もしかしたら他の人の参考に成るかも。 何故そんな事をしたのか? まず、先日のエントリにも書いた通りだが圧倒的にやる事が無かったから。虚しい毎日。これはWebサーバを書く事で解消されるに違いないとかっていう事では無くてですね。 こうカーネルとのオーバーヘッドがどうこうで、どの処理をするのにどのシステムコールを使って云々。 スレッドとイベントはどうこうで、たくさん過ぎるetcetc 皆さん大変だなーと。でもまぁ用途が決まってるんだったら
OMakeすごい。OMakeはマジですごい。 OMakeはGNU makeの代替品みたいなものなんだけど、正直なところこのツールの強力さはGNU makeと比べると失礼なくらいすごい。これのおかげで、「コード修正→ビルド→デバッグ→コード修正→・・・」のループの、ビルドにあたる作業がほぼ消え去った。 ファイルの依存関係の解析がとにかくすごい。よくあるユースケースなんかの場合、最小限の手間でほぼ完璧に依存関係を網羅して、よしなにビルドしてくれる。 とりあえず、はやみずが実際に使ってみたケースを例にとってそのすごさの一端を紹介しようと思う。 case study 論より証拠ということで、自分が OMake を試しにつかってみたケースを紹介する。C言語でスタティックライブラリを作っていて、それに加えて簡単なテストプログラムを書いている。 /include/ 以下にヘッダファイルが全部ある /sr
「C++ はあまりに『熟練者に優しく』なってしまった」(C++ has indeed become too "expert friendly") Stroustrup 氏の言は真実である。なぜなら熟練者は言語のイディオムに深く精通しているからである。プログラマが理解するイディオムの増加に従って、言語は彼あるいは彼女にとってよりフレンドリーになる。この open content book の目的はほどほどに C++ に精通しているプログラマに対して現代的な C++ のイディオムを提示し、C++ をよりずっとフレンドリーに感じるレベルにまで知識を引き上げる助けと成る事である。本書は熟練した C++ プログラマが C++ を使ってプログラミングや設計を行う際に用いる事の多い再利用可能なイディオムの網羅的なカタログと成るよう意図されている。これは、それらのテクニックや語彙をひとまとめにしようという
gcc4.1の__attribute__のメモ。 関数属性 † __attribute__((alias("name"))) 関数を他の関数のエイリアスにする。 void foo() __attribute__((alias("bar"))); __attribute__((always_inline)) 最適化がオフのときでも、関数をインライン展開する。 __attribute__((flatten)) 関数のサイズやインライン化パラメータを無視して、常にインライン展開する。 __attribute__((cdecl)) 386専用。 __attribute__((const)) 関数に副作用がなく、戻り値が引数のみに依存すると仮定する。 __attribute__((constructor)) 関数がmainに入る前に自動的に呼ばれるようにする。 __attribute__((dest
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く