Explaining glibc malloc internals. slide: http://www.slideshare.net/kosaki55tea/glibc-malloc
![The 67th Yokohama kernel reading party](https://cdn-ak-scissors.b.st-hatena.com/image/square/885c6aabe327fc41a395af503805e5f964f281e1/height=288;version=1;width=512/https%3A%2F%2Fi.ytimg.com%2Fvi%2F0-vWT-t0UHg%2Fhqdefault.jpg)
2. 今日は何の話? libc でもっとも良く使われる関数、 malloc と free の実装の解説 もっと一般的に言うと、プロセスのアドレス空間のうち、 heap 領域とよばれる、場所を操作する関数の説明 解説というと聞こえはいいが、そんな大層なものじゃない 3. Linux での process address space model kernel stack text mmap data bss heap 矢印はデータ量の増加と ともに、伸びる方向 使用中 使用中 使用中 今日は、ここ、 heap と呼ばれる領域のお話 low high free free free 4. 古典的 malloc プログラミング言語 C (いわゆる K&R) で紹介された初期の Unix の malloc 実装 使用中 使用中 使用中 free listの head 使用中 ・ free list を
今回は Atlassian の開発者である Charles O’Farrell によるゲストブログです。チームが DVCS として Git を選択する理由について説明します。Charles はコーディングをほとんど DVCS 上で行い、また ClearCase から Git へユーザーを移行させる作業を行ってきました。 前回の記事では、分散バージョン管理システムとしてチームがなぜ Mercurial を選択するのかについて考えてみました。今回は、分散バージョン管理システム (DVCS) として なぜ Git が有力な選択肢であるのかについて考えてみましょう。 1970 年の黎明期から、ギークたちはどちらが善でどちらが悪かという血なまぐさい論争を長い間行ってきました。それが Vim と Emacs との間の戦いです。最近では、それとは別のツールセットについて、ギークたちは本来の仕事そっちのけ
8. コミットに入ってる情報 リビジョン (SHA-1 ハッシュ) 例: 23cdd334e6e251336ca7dd34e0f6e3ea08b5d0db Author (コミットを作成した人) 例: オープンソースプロジェクトにパッチを送った人 Committer (コミットを適用した人) 例: 受け取ったパッチを取り込んだ人 ファイルのスナップショット (tree) コミットで変更されたファイルを含むツリー(説明は省略) 1つ前のコミットのリビジョン 例: 4717e3cf182610e9e82940ac45abb0d422a76d77 9. コミットに入ってる情報 リビジョン (SHA-1 ハッシュ) 例: 23cdd334e6e251336ca7dd34e0f6e3ea08b5d0db Author (コミットを作成した人) 例: オープンソースプロジェクトにパッチを送った人 Co
Garbage Collection Advent Calendarの25日目の記事です。 ついに、か、完走したぞ!!うぉぉー。はあ、つかれた。もう来年はいいです。 ということで今日の分のスライドもあわせて、まとめてこの記事にはりつけておきます。 (あーあ、はてなダイアリーにslideboom埋め込めないのか…) mrubyのTri-color incremental mark & sweep GC 解説 その1 mrubyのTri-color incremental mark & sweep GC その2 mrubyのTri-color incremental mark & sweep GC その3 しかし、スライドのアニメーションとGCの解説って相性いいですねえ。 Impressでpptを吐いているのですが、それなりにslideboom上でも動いてびっくりしています。ツイートする
トップページ > ノウハウ > コピペで使えるIT英語tips > 海外のプログラマーにバグを指摘し、修正を依頼するには【連載:コピペで使えるIT英語tips】 グローバル化が進む中、海外企業とのやり取りが増え「英語でのコミュニケーションが求められる」というエンジニアも多いはず。 しかし、「英語でどう伝えればいい?」、「場面に応じた表現が分からない」など、英語でのやり取りに実務以上の時間を取られてしまっているという悩みを抱えているのが現状ではないだろうか。 そんな皆さんの悩みを解決するべく、通常の業務の中で必要となる「今すぐ使える英語の例文や用法」などの英語tipsを連載で紹介。 初回となる今回は、エンジニアであれば誰もが必ず直面する「bug(バグ)の指摘の仕方」について紹介する。 バグを指摘する際には、「bugがあるから直してくれ」と伝えるだけでは適切ではないというのは当然のこと。日本語
ファームウェアをつくる仕事になりまして。アップデートのできない前提とすると、きちんと抜けなく確かめないとじゃないですか。趣味でコードを書くことはあっても、仕事ではなかったし、自分しか見ないしで、テストとかほとんど何も考えてなかったので、この機会に勉強することにしました。自分が忘れないように書いておきます。 参考にした資料 Getting Started with TDD for Microchip’s PICs O'Reilly Japan - テスト駆動開発による組み込みプログラミング Web系やIT系のかたがただと実践した記録が勉強会で出てきてるけど、マイコン開発だとなかなか見つからなくて。上記の書籍とサイトを参考に、自分の環境を整えました。上記サイトは幸いにもPIC向け開発のものだったのですが、32ビットPICだと若干見直さないといけない箇所があり苦労しました。そういうところはオライ
色々なところで見かけるコーディング規約を見て意識はしているのですが、 その時の気分で書き方を変えてしまうことが多々あったので、自戒を込めてコーディング規約をまとめてみました。 「なぜこの規約が存在するか」を明確にするために、できる限り理由も併記しています。 ただかなり主観的な部分があるので、あまり意味がないかもしれません…。 「この記事のこの規約は気に入らない。」と思うことがきっとあると思います。 その時はコメント欄などに理由も合わせて書いてくれると嬉しいです。 この記事ではRubyのコーディング規約をまとめています。 近いうちにRailsとCoffeeScriptのコーディング規約もまとめるつもりです。 Rubyのコーディング規約は以下のページを参考にまとめました。 https://github.com/styleguide/ruby https://github.com/bbatsov
アーキテクチャについては、以下のパワポを見て頂くとして。 なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423 from yusuke suzuki アーキテクチャ設計を要約すると「"何をやるか"と"どうやるか"のバランスを取る事」となります。 "何をやるか"というのは"システムのミッション"のことであり、ソフトウェア品質モデルで言うところの"利用時の品質"、つまりはシステムのユーザーが何を達成したいのかということです。これは「このシステムが動き出した時、どんな価値を生み出すべきか」を考えることになります。 次に"どうやるか"というのは、2つの話があると思っています。1つめは"静的な構成"としてのどうやるか。2つめは"動的なプロセス"としてのどうやるか。 "静的な構成"というのはクラス構成であり、設定ファイルの構成であり、フレームワークの構成であり、つまり、システ
急に蒸し暑くなってきましたね.でぶちんなのでけっこうこたえます.タイトルはちょっと釣り気味.ビビっと来た方は是非論文に目を通してみてください:) 例によって,仲間内でやっている小さな勉強会で論文紹介をしてきましたので,そのご紹介です.ぼくの専門というか興味の中心は自然言語処理なので,ふだんはそっち方面を追っているのですが,勉強会では機械学習方面を中心にいろいろ読んでみてます. 今回は岡野原さんのこのツイートで興味を持った以下の論文を読ませていただきました.名前もかっこいい.ヴァニッシングコンポーネントアナリシス! ICML2013のbestpaper。データ中の集合(例えば画像中の8の字など)が0になるような生成多項式を求める(=集合のコンパクトな表現)効率的なアルゴリズムを提案し教師有学習時の特徴生成などに使える。すごい http://t.co/DedSoyLaJR — 岡野原 大輔 (
ここでは,メイクファイルの基本的な書き方としてルールの説明をしましょう.ここからは,Makefileといえばmakeが参照するメイクファイルのことを指すものとします. コメントと改行 その前に少しコメントの書き方について解説しておきます.Makefileでは,#から行末までがコメントです.例えば, # # Hello Worldを出力する # all: @echo Hello World! のように使います. また,makeは基本的に行指向です.見やすくするために改行したい場合はバックスラッシュ\を使って改行を無視させることができます.例えば,マクロの定義(後述)で object_files = \ foo.o \ bar.o \ baz.o と書けば,makeは改行を無視して次のように解釈します. object_files = foo.o bar.o baz.o ここで注意することは,f
makefileに現れるルールは、いつ、どうやって特定のファイル——これをターゲットといい、ほとんどはルールひとつにつき1つだけです——を作り直すかを指示します。ルールはターゲットの依存関係である別のファイルや、ターゲットを作成したり更新したりするためのコマンドを列挙します。 ルールの順番に意味はありません。ただし、makeにターゲットを与えるためにあるデフォルトゴールを他の方法で指定しなかった場合を除きます。デフォルトゴールとは一番初めのmakefileの最初のルールのターゲットのことです。最初のルールに複数のターゲットがある場合、一番初めのターゲットだけをデフォルトとみなします。 ただしこれには、ピリオド(".")で始まるターゲットは、一つ以上のスラッシュ("/")のようなものを含んでいない限りはデフォルトにはならない、それから型ルールを定義するターゲットはデフォルトゴールとして機能し
先日、室内飛行機の自律飛行プロジェクトの成果物としてH8/3694のフレームワークを公開しましたが、その際、自動コンパイル(ビルド)をどのように構成するかで少し悩みました。 オープンソース系の大きなプロジェクト(apacheなど)をみると、ソースとそのコンパイル結果であるバイナリは同じ場所に展開されるのが常套手段のようです。これはコンパイラが分割コンパイルをサポートしており、ビルドを行うのにメジャーなプログラムであるmakeがこのような方法を簡単に実現できるためだと思います。 例えば、あるフォルダ内にあるc言語のソースを全てまとめてhogeというプログラムを生成するmakeスクリプト(Makefile)は、以下のように簡単に書けます。 TARGET = hoge SRCS = $(shell ls *.c) OBJS = $(SRCS:.c=.o) all : $(TARGET) %.o
来年も作りたい!ふきのとう料理を満喫した 2024年春の記録 春は自炊が楽しい季節 1年の中で最も自炊が楽しい季節は春だと思う。スーパーの棚にやわらかな色合いの野菜が並ぶと自然とこころが弾む。 中でもときめくのは山菜だ。早いと2月下旬ごろから並び始めるそれは、タラの芽、ふきのとうと続き、桜の頃にはうるい、ウド、こ…
makeってなに?¶ ソースファイルを分割して大規模なプログラムを作成していると, コマンドでコンパイルするのが面倒である. また, 一部のソースファイルを書き換えだけなのに全部をコンパイルし直すのは時間の無駄である. そんな問題を解決するのが make である. Makefile と呼ばれるテキストファイルに必要なファイルと各ファイルのコンパイルのコマンド, ファイル間の依存関係を記す. そして, “make” というコマンドを実行するだけで, 自動的にコマンドを実行してコンパイルしてくれる. これだけではスクリプトと大差がないのだが, make は Makefile に記された依存関係に基づいて更新されたファイルの内関連のあるものだけを更新することで, コンパイル時間を短くする. make は特定のプログラミング言語に依存したものではない. C 言語のソースファイルのコンパイルにも使え
前回はMakefileをヘッダファイルの依存関係に対応させてみた。そのMakefileは入力ファイル(ソース、ヘッダ)と出力ファイル(依存関係ファイル(.d)、オブジェクトファイル、実行ファイル)がすべて同じディレクトリにあることが前提となっていた。しかし、多くのプロジェクトではビルドオプションによってコンパイルオプションや機能を切り替えるようになっているだろう。そのような場合は、出力先ディレクトリも変わるようになっている方が良い。そこで今回はビルドオプションによる設定変更とサブディレクトリの対応を行ってみる。サンプルプロジェクト概要ソースツリー今回は以下のようなC++プログラムのソースツリーを想定する。なお、できあがる実行ファイルはhelloにする。 myapp/ +- Makefile +- src/ +- main.cpp +- image/ | +- converter.h | +
CやC++で書かれたプログラムをMakeを使ってビルドする、というのはUnix/Linuxではよく行われていることだが、ちゃんとしたMakefileを書くのは意外と難しい。例えば以下の3つのファイルからなるプログラムを考える。foo.h: 関数fooの宣言がある。foo.c: 関数fooの実装がある。main.c: 関数fooを呼び出す。 /* foo.h */ void foo(int a); /* foo.c */ #include "foo.h" #include void foo(int a){ printf("%d\n", a); } /* main.c */ #include "foo.h" int main(int argc, char **argv){ foo(10); return 0; } Makefileは例えば以下のように書ける。 PROG := myapp SR
まずは分かりやすいプロセスとスレッドから。 Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスはプログラムの実行単位である。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される。一方、スレッドは CPU 利用の単位である。スレッドはそれぞれが専用のスタックと CPU レジスタのコピーを保持するが、ファイルやヒープメモリは同一プロセス内の全てのスレッドで共有する。 スレッドのさらにサブセットがファイバである。スレッドとの違いは切り替え動作にありファイバのほうが軽いというメリットがある。プロセス、スレッド、ファイバの関係はこちらの説明が分かりやすかった。 プロセスはプログラム実行のための固有のメモリ空間を持っており、最も独立性の高い実行単位である反面、起動や切り替えに時間がかかるという特性を持っています
THIS BLOG POST IS VERY OLD NOW. YOU PROBABLY DON'T WANT TO USE THE TECHNIQUE DESCRIBED HERE. GO'S sync.Pool IS A BETTER WAY TO GO. The other day I wrote about our use of Lua to implement our new Web Application Firewall. The other language that's become very popular at CloudFlare is Go. In the past, I've written about how we use Go to write network services including Railgun. One of the operationa
This week there was a discussion on the golang-nuts mailing list about an idiomatic way to update a slice of structs. For example, consider this struct representing a set of counters. type E struct { A, B, C, D int } var e = make([]E, 1000) Updating these counters may take the form for i := range e { e[i].A += 1 e[i].B += 2 e[i].C += 3 e[i].D += 4] } Which is good idiomatic Go code. It’s pretty fa
僕がプログラミングに触れた当時は、プログラミングといえば「まず C 言語」でした。それから 10 年以上が経ちました。学校の授業や企業の研修では未だに C 言語を教えているところがあるようです。関数型プログラミング言語という波が来ている 2012 年にもなって未だに C 言語をやっているというのはまるで進歩が無く残念な気もしますが、比較的多くのプログラマに浸透している共通言語を最初に教えるというのは、一方では喜ばしい事だと解釈する事もできるのかもしれません*1。まぁとにかく、本意にせよ不本意にせよ現場で プログラム初心者に C 言語を教える羽目になった 人がたくさんいて、プログラム初心者なのに C 言語を学ばざるを得なくなった 若者がたくさんいるということです。 C 言語を教えるときに避けて通れないのがポインタで、プログラム初心者が C 言語を学ぶときにやたらとつまずく人が多いのがポインタ
It looks like Go 1.4 will remove support for Go packages containing C code (as described below, don’t confuse this with CGO), so enjoy it while it lasts. This is a short post designed to illustrate how Go package authors can write package level functions in C and call them from Go code without using cgo. The code for this article is available on GitHub, https://github.com/davecheney/ccode. Some wa
大和田常務のコラ画像を淡々と貼るスレ Tweet 1:以下、名無しにかわりましてVIPがお送りします:2013/09/24(火) 00:15:58.23 ID:NrwCZ06u0 はい 2: 忍法帖【Lv=2,xxxP】(1+0:15) :2013/09/24(火) 00:17:30.81 ID:7kuieTjM0 誰得 6:以下、名無しにかわりましてVIPがお送りします:2013/09/24(火) 00:22:13.11 ID:+ZO9AaD/0 7:イヤンマッケイ ◆Fugazi.6zA :2013/09/24(火) 00:25:59.63 ID:tRDXqaD80 8:以下、名無しにかわりましてVIPがお送りします:2013/09/24(火) 00:26:00.91 ID:xyzTnJf90 普通にワロタwww 10:以下、名無しにかわりましてVIPがお送りします:2013/09/2
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く