K. Sakaguchi @pi8027 そういえば mmap を使ってメモリ確保できるよねっていう有名な話がありますけど、あれって malloc で同じサイズ取ってくるのに比べて何か利点あるんですか。 2011-02-12 23:56:40
![真夜中のmalloc](https://cdn-ak-scissors.b.st-hatena.com/image/square/e75e3779f59cf7d90e019f776d3f57295b479b4e/height=288;version=1;width=512/https%3A%2F%2Fs.togetter.com%2Fogp2%2F8b460d8a6bfa037fc3a74e7d45a25784-1200x630.png)
K. Sakaguchi @pi8027 そういえば mmap を使ってメモリ確保できるよねっていう有名な話がありますけど、あれって malloc で同じサイズ取ってくるのに比べて何か利点あるんですか。 2011-02-12 23:56:40
Linux で signal + マルチスレッド、というとハンドラであれこれしようとすると、これはもう悪夢のように大変でひとつ signal 処理用スレッドを用意するのが定石のようです。 さてはて、そんなことで FreeBSD もそういうコードを書いて fork した子供を回収してやろうとしたところ、全く動いていません… orz これはどうしたんだろう??と調べた結果 空の signal handler を signal でしこんでやると動きだすことがわかりました。 はてさて、これはカーネルにどんな実装の差があるのでしょうか? そして、他のBSDではどうなっているのでしょうか? これが今回の疑問です。 実験 ひとまずこんなコードを使って引数に 0-3 を渡して実験します。中身はこんな感じのプログラムです。 #include <stdio.h> #include <signal.h> #in
今回のお題は char 幅じゃなくて word 幅の memset 、つまりプロトタイプだと void* memset64(void* destination, uint64_t image, int num_words); をどれだけ高速に行うかという話。なぜ高速化するかというと、塗りつぶす領域がけっこうでかいから。 候補 1: REP STOSvoid* memset64(void* d, uint64_t i, int n) { asm("cld; rep stosq;" :: "D"(d), "a"(i), "c"(n) : "memory"); return d; } 最近の CPU はクソ賢い。そのため、下手に手で loop unrolling するよりも、逆に CPU に「ここはループなんだぞおおお~」というのを明示的に指示してあげたほうが CPU 側が勝手かつ不気味に最適な
たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。 たとえば、コールバック関数をセットする関数の型が、 void set_foo_callback(void (*)(void* cb_arg), void* cb_arg); なら、以下のようにクラスとメンバ関数を引数にとるテンプレート関数を定義し、 template <typename T, void (T::*FUNC)()> void to_foo_callback(void* cb_arg) { T* obj = reinterpret_cast<T*>(cb_arg); (obj->*FUNC)(); }以下のように受け渡せばいい。 class K { publ
[注: この記事はわかったところまでを忘れないうちに書き留める目的のもので、soとdylibの違いとかELFとMach-Oの違いとかがいまいちわかってない人間が書いているので要注意です!] プラグインの側から本体が提供している関数(API)を呼んでどうこうしたいってケースの話。たとえば下の例ではプラグインの側から本体で定義されているaddって関数を呼ぼうとしている。しかし単に本体側の関数のプロトタイプ宣言を持ってきただけではシンボルが見つからない旨のエラーになる。 #include <stdio.h> int add(int, int); extern "C" { void foo(int x){ printf("%d\n", add(x, 42)); } } $ g++ -shared -o so.so so.cpp Undefined symbols: "add(int, int)",
HeartRails Tech Blog ハートレイルズのエンジニア、デザイナーによるブログです。 ウェブサービス、スマホアプリ、IoT デバイスの開発に関連する技術的な情報を発信していきます。 こんにちは、ハートレイルズの境 (@kazsakai) です。好きなエクスペンダブルズはドルフ・ラングレンです。 さて、弊社ではよくサーバーサイドを nginx+passenger+Ruby on Rails という構成でサービスを構築しています。 Rails を使っているのは社名が HeartRails だから、というわけでは全くなく、単に僕が昔から Ruby を使っていたからで、他意はありません。 passenger は今や Rails/Rack アプリ向けの標準ミドルウェアみたいな存在で、このおかげで随分 Rails の運用が楽になっています。passenger のリリース以前は手製スクリプ
C言語において実行時間を測定する為の方法はいくつかある。gettimeofday, clock, getrusage, timesを利用する方法である。ここではこれらの方法について検証してみる。これは2005/12/30時点での情報であり、古い亊が考えられるので注意して頂きたい。さらに、内容のほとんどはmanを移しただけなので、正確な情報を得るためにそれぞれの関数のmanを見ることを強く推奨する。 System: Linux 2.6.12 glibc: glibc 2.3.5-1ubuntu12 gettimeofdayを使用する方法 通常はこの関数を使用するのをお勧めする。 gettimeofdayはSVr4, BSD 4.3準拠である。返り値の型はsys/time.hに定義されるstruct timevalで有る。
ではLock-free Stackについて図とプログラムを交えながら説明します。C++ではなくCを使います。 これは複数スレッドからロックによる排他無しで共有できるスタックで、外部には node* top; void push(const T*, node** top); bool pop(T*, node** top); を提供します。*1 このスタックはbottomへと繋がる線形リストをベースとして動作するため、配列ベースのスタックにパフォーマンスで劣ることもあります。*2 その線形リストを構成するノードのデータ構造から見てみましょう。 struct node{ T data; node* next; }; ごく典型的な線形リストのノードと同じです。 道具の紹介 lock-freeデータ構造を構成する場合に頻出のCompare And Swap。 C言語の擬似コードで書くと以下のような
cWebsocketはC言語製のオープンソース・ソフトウェア。HTML5の数ある機能の中で、最も可能性を秘めているものと言えばWebSocketではないだろうか。これまでのHTTP/HTTPSとは違う、コネクションを張り続ける接続が可能になる。 Google Chromeから接続してメッセージを送信しているところ コネクションを張り続けるため、これまでのApacheではコンセプトが異なっている。他のWebサーバにとっても、これは大きなチャンスになるだろう。WebSocketだけ効率的に提供するサーバも増えるだろう。その手助けになり得るのがcWebsocketだ。 cWebsocketはC言語で書かれたシンプルなWebSocket実装となっている。ライブラリとして提供されるので、他のWebアプリケーションサーバなどはcWebsocketを読み込んで実装する形になるだろう。サンプルとしてメッセ
JavaScript Advent Calendar 2010 という企画をやっています。既にもう7日目なのですが、まだまだ os0x さんや hasegawayosuke さんや nanto_vi さんや secondlife さんといったすごい方々が記事を書いてくれる予定になっていますので、是非チェックしてみてください。 今日は、最近話題の node.js を読んでみます。僕自身は node.js を追っかけてたのは今年の5月ぐらいで、ソースは半年以上見てなかったのですが、この機会にまた読みました。この記事は、C++ は一応読めるけど V8 とか libev はあまり知らない node.js 好きの人を念頭に置いています。 拙訳の Embedder's Guide - V8 JavaScript Engine に書いてあるようなことは説明なしでいきたいと思います。また、適宜 libev
max 関数や min 関数は C 言語だと自分で書かないといけないので int max(int a, int b) { return a>b?a:b; } などと書いたりするのだが,比較を行っているので分岐が発生するから遅くなると思い,これって本当に速いのかと思って調べてみた. 実験 以下の5つのコードを用意した.これらをそれぞれ max 関数の実装とした.検証用のコードは最後に載せる.PHP でランダムな2数値を作ったデータを 1,000,000 組用意し,入力データとして配列に読み込んだあと,ループで max 関数を実行した.このループの前後で gettimeofday で時間を測り,所要時間を算出した.それぞれの実装に対し所要時間の5回の平均をとって比較した.コードは gcc version 4.2.1 (Apple Inc. build 5664) でオプション無しでコンパイルし
Vladimir Makarov, vmakarov@users.sourceforge.netApr 5, 2001 This document describes SHILKA (translator of a keyword description into code for fast recognition of the keywords). 1. Introduction 2. Keywords description language 2.1 Layout of keywords description 2.2 Declarations 2.3 Keywords 3. Generated code 3.1 C++ code 3.2 C code 4. SHILKA Usage 5. Future of SHILKA development 6. Appendix 1 - Syn
はじめまして、gumiの津村です。 現在は解析系の仕事をしたり、ツールを作ったりしています。 今回の話は高速化についてです。 結構長めの文章です。 目次 実行速度の高速化 Python/C API ctypes Pyrex Cython SWIG その他 纏め 実行速度の高速化 高速化といっても色々ありますが、今回は実行速度の高速化についてです。 弊社ではPythonを全面的に採用していますが、そもそもLLは実行速度が遅い言語です。特にC言語のようなコンパイラ系の言語と比べると非常に遅いです。 それでもLL系の言語がここまで使われるようになったのは、開発効率が良いからです。 もはや常識ですね。 しかし、それでも特定の領域ではどうしてもPythonのようなLL系言語では厳しい部分も出てきます。 アルゴリズムを変更しても、ハードウエアを変えても、無理な物は無理です。 速度に問題がある場合の最適
C 言語のポインタについての基礎中の基礎について解説します。*1 ポインタに入る前に、先に通常の変数宣言について解説する必要があるので解説します。 例えば int 型の変数を使いたい場合は以下の用に宣言します。 int x = 10; この用に記述したとき、下の図のようにメモリ領域に "x" という名前で確保されます。 アドレスが16進表記だったり 4 ずつ増加しているのは特に深い意味はありません。要するにメモリの領域には番号が振ってあるという事がポイントです。 今後、この変数は x という名前で使用できますね。例えば x = 20; と、記述した場合、メモリ領域は以下のような感じになります。 コンピュータではメモリにアクセスするにはアドレスを指定する必要があるのですが、そこに "x" という名前を付けて使えるようになるわけです。 ポイント 変数を宣言すると、メモリに領域が確保される。 以
LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. LLVMのC/C++コンパイラであるClangがまたひとつのマイルストーンに到達した。[cfe-dev] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)の報告によれば、LLVM Clangを使ってLinuxカーネル2.6.36/SMP版のビルドに成功したという。同カーネルを使ってXの利用とネットワークの利用も確認したと報告されている。 LLVM Clangは2010年2月にセルフホスティングに到達。OSSのC
※2017年11月8日、「やさしいC 第5版」「かんたん C言語」「ふつうのLinuxプログラミング」「C言語による スーパーLinuxプログラミング」「モダンC言語プログラミング」のリンクを修正。 Amazonで評判が良い本を、発売日順に並べてみた。 入門書 脱 初心者 アルゴリズム リファレンス Linuxプログラミング プログラミング技術 デバッグ その他 厳選6冊 その他 Webサイト 入門書 『C言語改訂版1、2』を読んだ後に『独習C』を読めばだいたい理解できると思う。 やさしいC 第5版 (「やさしい」シリーズ) 作者: 高橋麻奈出版社/メーカー: SBクリエイティブ発売日: 2017/06/14メディア: 単行本この商品を含むブログを見る価格2,700円高橋麻奈さんの本はどれも分かりやすい(『やさしいJava』とか、『やさしいXML』とか)。ただし内容は薄いので、他のプログラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く