タグ

cに関するHoriuchi_Hのブックマーク (19)

  • Glibc malloc internal

    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 を

    Glibc malloc internal
  • パワーポイントでC言語プログラミング

    どこの会社もそうですが、パワーポイントの資料作るのが得意なエンジニアはたくさんいるのですが、実際にプログラムでコードを作るのが得意なエンジニアはあまりいなくて、当に困ります。

    パワーポイントでC言語プログラミング
    Horiuchi_H
    Horiuchi_H 2013/10/03
    これは酷い(褒め言葉)
  • C言語は今でも価値のある言語か?

    Couchbaseの作者Damien Katz氏は,C言語はバックエンドプログラミングにおいて現在でも優れた言語である,という意見を持っている。しかし他の開発者は,C言語はあまりにも欠陥が多いとしてC++Javaを支持するもの,あるいはいずれも好まないというものなどさまざまだ。 CouchDB の開発者であるDamien Katz氏は,The Unreasonable Effectiveness of C と題した先日のブログ記事において,C言語がバックエンドのための優れた言語であると断言した。氏はC++Java,さらにはErlangやRubyのようなより現代的な言語よりも,今後もC言語を支持していくつもりだという。ただし単純に,C言語を他のどれよりも優れた言語だと言っている訳ではない。"言語自体のパフォーマンスと信頼性が重視される場面においては,C言語に比類する言語は皆無である",別

    C言語は今でも価値のある言語か?
    Horiuchi_H
    Horiuchi_H 2013/01/29
    どの言語を選択するかは、プラットフォームや環境次第。少なくとも C言語で文字列処理が主なプログラムは書きたくないよね。何事も適材適所。
  • Objective-Cで少しでも疎結合なプログラムを書くためのチェックポイント | TOKOROM BLOG

    チェック1. なんでもかんでもヘッダーファイルでimportしていませんか? 例えば、こんなコードを書いていませんか? #import "OtherLibrary1.h" #import "OtherLibrary2.h" @interface Library @property (strong) OtherLibrary1* otherLibrary1; @property (strong) OtherLibrary2* otherLibrary2; @property (assign) BOOL flag; @end Libraryというクラスを作り、そこでOtherLibrary1とOtherLibrary2をpublicなpropertyとする場合、当然のごとくOtherLibrary1とOtherLibrary2のimportが必要なわけですが、なにも考えずにヘッダーファイルでO

    Horiuchi_H
    Horiuchi_H 2012/08/17
    objective-cだけでなく、CやC++でも原則は同じですね。
  • JPCERT C Secure Coding Standard 日本語版 - プリプロセッサ (PRE) (#c01)

    CERT C コーディングスタンダード 日語翻訳版コーディングスタンダードのご利用条件/著作権・免責事項 00. はじめに 01. プリプロセッサ (PRE) 02. 宣言と初期化 (DCL) 03. 式 (EXP) 04. 整数 (INT) 05. 浮動小数点 (FLP) 06. 配列 (ARR) 07. 文字と文字列 (STR) 08. メモリ管理 (MEM) 09. 入出力 (FIO) 10. 環境 (ENV) 11. シグナル (SIG) 12. エラー処理 (ERR) 13. Application Programming Interface (API) 14. 並行性 (CON) 49. 雑則 (MSC) 50. POSIX (POS) AA. 参考情報 BB. Definitions CC. 未定義の動作 DD. 未規定の動作 XX. お問い合わせ 00はじめに このページ

    JPCERT C Secure Coding Standard 日本語版 - プリプロセッサ (PRE) (#c01)
  • پاسور انلاین

    پاسور انلاین پاسور انلاین پاسور انلاین,پاسور انلاین شرطی,بازی انلاین پاسور حکم,سایت پاسور حکم آنلاین,پاسور آنلاین برای کامپیوتر,پاسور حکم آنلاین شرطی,سایت بازی پاسور آنلاین,بازی آنلاین پاسور 4 برگ,دانلود مستقیم پاسور انلاین…

  • 4277075694とは何か - 西尾泰和のはてなダイアリー

    Windows環境でコードを書いていたらなぜかとある変数の値が4277075694とかいう謎の値になっているのを発見。なんだろうこれは?と調べてみたらこれ16進表記すると0xFEEEFEEEで、HeapFree()が呼ばれたあとの領域がこれで埋められるんだそうな。 0xBAADF00D : 3131961357 : HeapAllocした領域 0xFDFDFDFD : 4261281277 : mallocした領域の前後2バイト 0xCDCDCDCD : 3452816845 : mallocした領域 0xDDDDDDDD : 3722304989 : freeした領域 0xFEEEFEEE : 4277075694 : HeapFreeした領域詳しいことはここにわかりやすい表があったのでそれを見るといいと思う: Win32 Debug CRT Heap Internals

    4277075694とは何か - 西尾泰和のはてなダイアリー
  • Windows(VC++)でunistd.h - 萌えの値段

    Unix開発をVCでしろ、ソースにはVCの跡を残すな、って無茶な要求だけどしょうがない。 UnixメインのソースをVCでコンパイルする際に問題になることの一つがunistd.h。 gethostnameとかgetpidを使いたい場合に必要になってくる。 とりあえず動くように適当にヘッダを作ってみた。 //<unistd.h>をWindowsで使用するための定義 #ifndef _UNISTD_H_ #define _UNISTD_H_ #ifdef _WIN32 #pragma once #include <io.h> /* access chmod chsize close creat dup dup2 eof filelength isatty locking lseek mktemp open read setmode sopen tell umask unlink write */

    Windows(VC++)でunistd.h - 萌えの値段
  • LL/SC based Lock-Free Queue - マルチコア時代の"データ構造とアルゴリズム"再入門

    データ構造とアルゴリズム再入門 はじめに ・並{行|列} & {Lock|Wait}Free ・ABA & ABA' ・volatile & メモリバリア ・プリミティブ ・CAS ・MCAS ・STM ・メモリ管理:free & GC ・Toots List & Skiplist [単方向List] ・リスト ・細粒度リスト ・Lazyリスト ・Lock-Freeリスト ・Lock-Freeリスト2 [SkipList] ・スキップリスト ・Lazyスキップリスト ・Lock-freeスキップリスト [双方向List] Queue & PriorityQueue [UnBounded Queue] ・Queue ・CAS based Lock-Free Queue ・LL/SC based Lock-Free Queue [Unbounded Priority Queue] ・Heap

  • やっぱりポインタのポインタは難しいようです — ありえるえりあ

    アリエルでは、プログラマとして応募してきた人に出すための設問を用意しています。現在、C版とJava版があります。 C版の作成は古くて、正直、もう廃棄してもいいかなと思わないのでもないですが、Javaは未経験でC/C++の経験はあります、という人はいますし、そういう人はいわゆるなんちゃってJavaプログラマよりは相対的に能力が高い傾向にあるのでC版も残しています。 最近、立て続けに、他は完璧な回答なのにポインタのポインタが絡む設問だけは間違い、という回答を受け取りました。結果引数(引数で値を返す関数。Cでは必要悪)で、返す値がポインタ値なので、引数の型をポインタのポインタにする必要がある設問です。他の設問で、ポインタを理解しているように見えました。しかし、ポインタのポインタが分からないということは、ポインタをきちんと分かっていないと判断せざるをえません。 昔なら一発でダメ出ししていたのですが

    Horiuchi_H
    Horiuchi_H 2010/01/28
    C++なら、リファレンスを主に使うからポインターのポインターは基本的に排除できるはず。と言うか、使いたくないな。
  • 最新Cコンパイラーの最適化事情 - Radium Software

    State of the art C compiler optimization tricks, Felix von Leitner, Linux Kongress 2009. 最近のCコンパイラーの最適化能力についてまとめたプレゼンテーション。定数の扱いやインライン展開などの基的な項目から始まって,分岐の削除やベクトル化, SIMD 化など,最新のコンパイラーに搭載されている様々な機能について調べている。 この手の分岐の削除はほとんどのコンパイラーで有効らしい。 ベクトル化については gcc がだいぶ頑張っている印象。 「gcc は全プラットフォームにおいてビデオコーデックプログラマーより賢い」 これらの最適化が実際のコードでどのように機能するか気になって逆アセンブリコードを覗いてみる人も少なくないと思うけれど,それを代わりにやってくれた感じだ。この手の話題に興味がある人ならば,目を通

    最新Cコンパイラーの最適化事情 - Radium Software
  • 初級C言語Q&A(15)

    初出: C MAGAZINE 1996年8月号 Updated: 1996-09-21 [←1つ前] [→1つ後] [↑質問一覧] [↑記事一覧] [ホームページ] 今回は、よく知られているけどちょっと分かりにくいアルゴリズム、あるいは、 今までの連載で出てきたトリッキーなコードについて、どのような原理で動作す るのかを紹介してみようと思います。ただし、一般論として、凝ったコードより も分かりやすいコードの方が価値がある場合が多いということも頭に入れておい てください。 凝ったアルゴリズム Q 【曜日の求め方】 Comp.lang.c FAQ listを見ると、曜日を求める関数として次のものが紹介され ていた。 dayofweek(y, m, d) /* 0 = Sunday */ int y, m, d; /* 1 <= m <= 12, y > 1752 or so */ { stat

  • Cだけプログラマの憂鬱 - 神様なんて信じない僕らのために

    それ、C関係ないのでは - プログラミング言語を作る日記 それC関係ないよね、というのはきむら(K)さんや、id:minekoaさんにも言われたことですが、 実行時のチェックがない。よって、配列のオーバーラン、不正なキャスト、開放されたメモリを参照する、といった理由でのバグが発生し、原因追及が非常に困難。 GCがない。 それ、C関係ないのでは - プログラミング言語を作る日記 うーん、ここは少し観点が違うかなと思います。 C++でも、配列はオーバーランするし、Cスタイルキャストで苦しむし、 解放されたメモリを参照するなんてことは日常茶飯事に起こるわけで、 これらを解決する手段として、C++では、 可変長配列としてstd::vectorを利用する 固定長配列としてboost::arrayを利用する キャストはstatic_castだけを使う(reinterpret_castはCの構造体を読み

    Cだけプログラマの憂鬱 - 神様なんて信じない僕らのために
    Horiuchi_H
    Horiuchi_H 2008/12/18
    いわゆる昔のコーディングスタイル、ですね。
  • C(++)言語: valgrindの使い方

    ubuntu% uname -a Linux ubuntu 2.6.12-10-386 #1 Sat Mar 11 16:13:17 UTC 2006 i686 GNU/Linux ubuntu% valgrind --version valgrind-3.0.1 (0) 目次 Valgrindに含まれるツール Memcheck: メモリエラーを検出する(default) Cachegrind: キャッシュミスを検出する Massif: ヒーププロファイラを使う まとめ valgrindの使い方とエラーメッセージを整理してみた。「valgrind --leak-check=full command」というコマンドラインをよく用いる。これによりメモリ周りのバグを検出出来る。 --tool=cachegrindではプログラム実行時のキャッシュミス率を測定する事が出来る。cg_annotateを

  • 息を吸うように objdump 2007-12-16 - 兼雑記

    このへんで書いた、どうなってるか自信が無いことがあったらとりあえず objdump しちゃえという話…とか言うと「アセンブリは…」みたいな雰囲気になることが多い気がするんですが、正直アセンブリなんか読めなくてもコードがどうなってるかくらいはわかるよん、という当たり前の話。 #include <stdio.h> struct S { explicit S(int x) : x_(x) {} int x() const { return x_; } int x_; }; int main() { S s(3); printf("%d\n", s.x()); } とりあえずこんなコードをインライン化されるか知りたいとする。とりあえず -g つきでコンパイルして objdump 。 % g++ -g inline.cc -o inline % objdump -S -C inline | lvコツ

    息を吸うように objdump 2007-12-16 - 兼雑記
  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

    Horiuchi_H
    Horiuchi_H 2007/09/19
    アライメントとは
  • 三項演算子の正しい書き方

    C・C++JavaPerl などのプログラミング言語では、条件演算子として三項演算子?:が用意されている。条件演算子の書き方として、以下のような説明がされることが多い。 condition ? true-expression : false-expression この説明は、以下のプログラムと同じ程度、間違っている。 #include <stdio.h> main( ){printf ("hel" "lo, world\n" );} 条件演算子は、正しくは以下のように書く。 condition ? true-expression : false-expression 使い方の例を示す。 compare = obj1 == null ? obj2 == null ? 0 : -1 : obj2 == null ? 1 : obj1.toString().compareTo(obj2.to

    Horiuchi_H
    Horiuchi_H 2007/07/28
    コードの書き方の話。コーディングスタイルやその場その場で見やすいように書けば良いのでは?3項演算子を書くときはだいたい短く書きたい時だし(その時は改行はメンドイ)、3項演算子を続けるときは改行してたし
  • Geekなぺーじ:C言語が嫌いな理由

    「Why I hate C」という記事がありました。 私は個人的にはC言語が好きですが、C言語が嫌だという視点も面白いので要約してみました。 かなり削っているので詳細は原文をご覧下さい。 C言語は組み込みに使うには良い言語ですが、その他の99.9%のアプリケーションを作るには最適とは言えません。 現在、アセンブラが一般的なアプリケーションを書くための良い解では無いことは自明です。 ここでは、もはやC言語もそうでは無い理由を述べたいと思います。 C言語の最も大きな問題はプログラマが間違いを犯しやすい事です。 私も良く間違えます。 どんなプログラマであっても数千行のコードを書いてバグが一つも無いということはありません。 コード量が少ないということは間違いの数も少ないということになります。 C言語は、言語のデザイン上、より多くのコードを書く事を要求します。 また、新しく開発されたプログラミング言

    Horiuchi_H
    Horiuchi_H 2007/01/05
    僕ももう、Cは触りたくない。C++もしかり・・・。
  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

    Horiuchi_H
    Horiuchi_H 2005/10/25
    スタックトレースの表示。glibが必要。
  • 1