タグ

Cに関するnorimackiのブックマーク (29)

  • valgrind を使ってみた - utahta blog

    valgrind とは? linux 環境で動く超強力なメモリデバッガー。 メモリリークや、セグメンテーション違反を起こしている正確な位置を教えてくれる。 以下、使い方メモ。 使用バージョンは、valgrind-3.2.1 メモリリーク検出など $ valgrind --leak-check=full ./program arg1 arg2 ヒーププロファイラ $ valgrind --tool=massif ./program arg1 arg2 メモリをデバッグしてみる 1. バッファオーバーランとメモリリークを行うソースコードを記述 $ vi main.cpp #include <stdio.h> int main() { int *a = new int[2]; a[2] = 0; // バッファオーバーラン return 0; // メモリリーク } 2. コンパイルする $ g

    valgrind を使ってみた - utahta blog
  • C言語向けユニットテスティングフレームワーク Unityについて - 千里霧中

    C言語のユニットテストのフレームワークには、昔はCUnit+自前のテストコードジェネレータを使用していたのですが、前々からUnityの使用機会が増えています。 理由は色々ありますが、自分の場合だと以下の点で便利なのが特に大きいです。 移植性に優れるため組み込み環境(ホスト、ターゲット両方で)でも使える 標準で自動テストディスカバリ機能(テストランナーの自動生成)を持っているので、そのままTDDのような軽快なテスティングを実現できる 特に組み込みCでTDDをやる場合は、PCUnitと並ぶ有望なテスティングフレームワークだと感じます。 少し前にTest Driven Development for Embedded Cの読書会にて解説を行う機会もあったので、今回Unityについて簡単にまとめたいと思います。 特徴 組み込み開発も対象に含むC言語向けユニットテスティングフレームワーク サイト:

    C言語向けユニットテスティングフレームワーク Unityについて - 千里霧中
  • INT10-C. % 演算子を使用する際、結果の剰余が正であると想定しない

    INT10-C. % 演算子を使用する際、結果の剰余が正であると想定しない C89 (および歴史的な K&R 実装)では、負のオペランドに対する剰余演算は処理系定義であった。これは C99 で変更され、C11 にも受け継がれている。 すべての C コンパイラが C 言語規格に厳密に準拠しているわけではないため、様々なプラットフォームの様々なコンパイラでコンパイルされて利用されるコードは、% 演算子の動作に依存してはならない。 C 標準 [ISO/IEC 9899:2011] セクション 6.5.5 には次のように記載されている。 / 演算子の結果は、第1オペランドを第2オペランドで除した商とし、% 演算子の結果は剰余とする。両演算子とも、第2オペランドの値が0の場合、その動作は 未定義 とする。 および 整数同士の除算の場合、/ 演算子の結果は、代数的な商から小数部を切り捨てた値とする。商

    INT10-C. % 演算子を使用する際、結果の剰余が正であると想定しない
  • 可変個引数マクロを使う - 職業としてのプログラミング

    C99規格(ISO/IEC 9899:1999 - Programming Language C)は1999年12月にISOによって規格化されたC言語の新しい規格です。従来のC言語(C89やANSI C)には含まれていない新機能が数多く規格として導入されています。以前の記事「bool型の落とし穴」で触れた_Bool型もC99の新機能の一つです。 今回、C99の新機能の中で個人的にかなり便利だと思っている「可変個引数(可変個数引数)マクロ__VA_ARGS__」と「定義済みマクロ__func__」を紹介します。 拡張マクロ機能の使用例 最近のデバッガは高機能化しているとはいえ、ログ出力(ロギング)によるデバッグが便利なケースはまだまだあります。拡張マクロ機能はこのようなログ出力の記述時に、力を発揮します。 例えば、次のようなログ出力関数があったとします。 void debug_printf(

  • ソケットプログラミング

    ソケットプログラミング 1. 定義 ソケット: Socket。TCP/IP アプリケーションを作成するための抽象化されたインターフェース。 2. ソケットの使用例 インターネット電話やインターネット放送を含むすべての TCP/IP アプリケーション。 3. ソケット関数 まずは sockaddr_in 構造体に適切なパラメータ設定を行い、以下のソケット関数を実行する。

  • C言語プログラミングに関するスモールトーク

    毎週お届けしているコラムも今年の12月には10周年を迎える。筆者は連載当初から参加しているメンバのひとりであり、10周年かと思うとなかなか感慨深いものがある。この10年を振り返ってという話題はまた別の機会に譲るとして、筆者自身はずいぶんと変化した。そのひとつに「連載当初はバリバリとプログラミングをしていた一方で、最近は自らコードを書くことがめっきり少なくなった」ということが挙げられる。「これが35歳定年説の実体か?」とも思いつつ、それでも先日、とあるプログラムを書くためにコードの森を探検するチャンスが久しぶりにあった。今回はそのときに気がついた「ちょっとしたトピック」を紹介しよう。 C言語によるオブジェクト指向プログラミング 世の中に「オブジェクト指向プログラミング」という考え方がある。古くから提唱されている概念であり、近代的なプログラム言語はほとんどオブジェクト指向でデザインされている

    norimacki
    norimacki 2008/07/17
  • memcpy 最適化 - kazuhoのメモ置き場

    バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwww memcpy() compiled with vectorizing compilers All current compilers for linux should support SSE2 auto-vectorization with #include <string.h> void *(memcpy)(void *restrict b, const void *restrict a, size_t n){ char *s1 = b; const char *s2 = a; for(; 0<n; --n)*s1++ = *s2++; return b; }(中略) x86-64 gcc memcpy() (中略) Linking in a user-compiled

    memcpy 最適化 - kazuhoのメモ置き場
  • Stroustrup: C++ Style and Technique FAQ 日本語訳

    Bjarne StroustrupによるC++のスタイルとテクニックに関するFAQ オリジナル: Bjarne Stroustrup's C++ Style and Technique FAQ ここにまとめられているのは、私がよく尋ねられるC++のスタイルとテクニックに 関する質問です。もしよりよい質問や回答に対するコメントがあれば、遠慮なく私に メール(bs@research.att.com)でお知らせください。なお、ホームページを改善する ために、私はあまり時間を割けないということを心に留めておいてください。 より一般的な質問は、一般的なFAQを 参照してください。 用語や概念については、C++用語解説を 参照してください。 この文書の内容は、質問と回答をまとめただけのものであるということに注意して ください。よい教科書にみられるような、注意深く選ばれた例題と解説の代わりになる もので

  • C/C++ テクニック集

    C/C++のよく使う構文の覚え書きです。ソースはすべてVisualC++6.0にてコンパイルして動作確認しています。 ミリ秒単位で処理時間を計測する 0〜nの乱数を発生させる 任意の確率で処理を行う 限りなくゼロに近いdouble値をゼロと判定する メモリを動的に確保する コンソールでアニメーション表示を行う printf()のような書式指定ができる関数を作る (橋なおき:07/02/06) リアルタイム処理の研究とかだと処理時間計測はつきものですね。 #include <stdio.h> #include <windows.h> int main(void) { LARGE_INTEGER freq,time_start,time_end; // 周波数,開始時間,終了時間 QueryPerformanceFrequency(&freq); QueryPerformanceCounte

  • アルゴリズムとデータ構造演習

    演習の目的は、プログラミング言語C及びSchemeの基礎を習得し、 それらの言語を通じて、講義「アルゴリズムとデータ構造」の理解を深めることにあります。 重要なお知らせ 特に重要な連絡事項はここに掲載されます。 課題について 課題には、A課題とB課題があります。(課題番号の末尾が種類を表します。) B課題が基礎的な課題で、A課題が発展的な課題となっています。 B課題を全問解くことが、単位取得の目安です。 C入門第1回(10月10日) C入門第2回(10月17日) C入門第3回(10月24日) C入門第4回(10月31日) C第1回(11月7日) C第2回(11月14日) C第3回(11月21日) C第4回(11月28日) C第5回(12月5日) Scheme第1回(12月12日) Scheme第2回(12月19日) Scheme第3回(1月9日) Scheme第4回(1月16日) C補講

  • 「C言語入門」第1回課題 - sumiiのブログ

    学部2年生冬学期の演習より。主に東京大学理学部情報科学科の進学振り分け内定者用の授業で、授業日程より2007年10月10日出題と思われる。(追記:IEでは文字コードをUTF-8にしないと空ページに見えるようです。) http://hagi.is.s.u-tokyo.ac.jp/ade/pre/1.html (via http://d.hatena.ne.jp/flappphys/20080119#p2) 課題(A) 課題1-A:シェルを実装せよ。 締切り:2007年11月06日正午 課題2-A:データを圧縮・解凍するプログラムを実装せよ。 締切り:2007年11月06日正午 課題3-A:スパムフィルタを実装せよ。 締切り:2007年11月06日正午 素晴らしい。 一応、 課題には、A課題とB課題があります。(課題番号の末尾が種類を表します。) B課題が基礎的な課題で、A課題が発展的な課題と

    「C言語入門」第1回課題 - sumiiのブログ
  • C言語-目次

    ・プログラムの書式、定数・変数・配列  ・演算子  ・制御文(if, switch, for, while, do, break, continue, return, goto)  ・ポインタと文字列  ・標準ライブラリ(入出力関数・文字処理関数・文字列処理関数・ファイル入出力関数・その他)  ・ユーザ関数の作成  ・main 関数に引数を渡す  ・構造体、共用体、列挙型  ・プリプロセッサ ・文字列処理 文字コード、文字列、文字列処理関数、ポインタ ・ファイル処理 テキストファイルの読み書き ・変数の有効範囲 ローカル・グローバル・スタティック変数、ローカル変数の有効期間 ・関数の作成 関数定義、関数の作成 ・ファイルの分割 コマンドmake、makefileの記述形式 など

  • C++ プログラミング入門

  • Apache Developers' C Language Style Guide - The Apache HTTP Server Project

    Apache Developers' C Language Style Guide¶ Compiled by Paul Sutton paul@awe.com. Based on a vote taken in November, 1996. Further refinements voted upon in July 1997. Introduction¶ [This bit could state that code should be laid out to be clear to someone else familiar with Apache. Functions should be short and easily understood. Comments should be provided to explain the rationale for code which i

  • google-perftools(tcmalloc)の使い方 - moratorium

    google-perftools(tcmalloc)の使い方 2007-12-17 (Mon) 22:59 Google OSS PFIでは毎週1人適当な話題で発表しているのですが、この間「GooglePerfToolsの使い方」という軽いお題で発表した資料を公開してみます。メモリ周りの問題は大変ですよね…。 google-perftools - Fast, multi-threaded malloc() and nifty performance analysis tools 肥え続けるTomcatと胃を痛めるトラブルハッカー ローテクなメモリ使用量監視方法 特にC++で長期運用中のメモリリークに苦しんでおられる方には役立つかと思います。基的にドキュメントの日語訳ですが。SlideShareだとなぜか図がずれるので、元ファイルをこちらに置いておきます。 | View | Upload

  • C/C++ リファレンス

  • さらに分かっておきたいトランジスタの種類 − @IT MONOist

    組み込みソフトウェア/ハードウェア開発における技術力の向上、改善・最適化などを幅広く支援する“組み込み開発エキスパート”のための情報フォーラム

  • Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」:ITpro

    「Code Reading―オープンソースから学ぶソフトウェア開発技法」(毎日コミュニケーションズ発行,写真1)というがあります。私はこのの監訳者ですから,やや自画自賛になってしまいますが,ソースコードの読み方を主題にしたはほかにはあまりありません。技法からツール,データ構造,アーキテクチャ,さらには実際にコードを読んで利用する実例まで紹介している網羅的で良いだと思います。 このの「はじめに」で「達人プログラマー」として知られるDave Thomas氏は以下のように書いています。 他人の作品を読まなかった偉大な作家,他人の筆づかいを研究しなかった偉大な画家,同僚の肩越しに技を盗まなかった腕のよい外科医,副操縦席で実地の経験を積まなかった767機長――果たして,そんな人たちが当にいるのでしょうか? たしかにその通りです。ソフトウエア以外の領域では修行することとはすなわち,他の人の

    Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」:ITpro
  • 初心者のC言語

    since:2002.06.02 更新に手が回らずすみません。 ANSI規格でもいいよという方は 御覧ください。m(_ _)m

  • Cで実現する「ぷちオブジェクト指向」:CodeZine

    はじめに CodeZineではお初にお目にかかります、επιστημη(エピステーメー)です。最初のアーティクルはクラシックなCのお話。 昨今のアプリケーションはオブジェクト指向言語による実装が主流と言ってもいいでしょう。C++Java、VB.NETさらにはRubyPythonといったスクリプト言語まで、オブジェクト指向でない言語を探すのに苦労するくらいです。 記事では、今なお現役バリバリで活躍している手続き型言語の代表格(?)Cによる、オブジェクト指向のマネゴト(オブジェクト指向風味のCコーディングスタイル)を試みます。対象読者 もっぱらCを主な開発言語として使ってはいるけども、オブジェクト指向に興味と憧れを抱いている方。抽象データ型 手始めにオブジェクト指向の特徴の1つ、「抽象データ型(ADT:Abstract Data Type)」をCで実現してみます。抽象データ型とは、データ