タグ

Cに関するmainyaaのブックマーク (18)

  • cppcheck インストール - would-be-astronomer's diary

    c言語のメモリリークを調べるツールとしてcppcheckをmacに入れてみる。 macbook air OSX 10.7.5 Lion mac mini OSX 10.10 Yosemite の両方に入れた。 手順としてはhomebrewをインストールしてhomebrew経由でcoocheckをインストール。 (1)homebrew をインストールする $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 出力の最後に Run `brew doctor` before you install anything Run `brew help` to get started と出てくる。 $ brew doctor 出力の最初は Please note that t

    cppcheck インストール - would-be-astronomer's diary
  • Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと #1/3

    [What Every C Programmer Should Know About Undefined Behavior #1/3 の翻訳です。] LLVMでコンパイルしたコードは、最適化を有効にしているとたまにSIGTRAPシグナルを生成するのはなぜなのか、と聞かれることがある。いろいろ調べたあと、(X86での話だが) Clangは "ud2" インストラクションを生成していたことがわかった。"ud2" は__builtin_trap()が生成するインストラクションと同じものだ。[訳注: #UD例外を発生させる命令。ソフトウェアが#UD例外をハンドルできているかテストするために使われる。つまり、ソースコードが未定義な振る舞いを使っていたから、LLVMはud2インストラクションを生成したのであって、LLVMのバグではない、ということ] こういう問題は幾つかあって、すべて、Cの未定義な振る

  • while(1){LOVE++;}を最適化 - duost

    最近ツイッターで "while(1){LOVE++}"と書き込まれてる指輪があって、 そのソースは最適化でLOVEが消えてただの無限ループになる云々という話があったので検証。 http://togetter.com/li/144840 用意したソースはこちら。 int main() { int LOVE = 0; while(1){LOVE++;} } それじゃアセンブラを見てみましょ。 まずは最適化抜き。 gcc -O0 -s hoge.c .file "hoge.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $0, -4(%ebp) ;LOVE=0 .L2: addl $1, -4(%ebp) ;LOVE++ jmp .L2 ;JUMP TO

    while(1){LOVE++;}を最適化 - duost
    mainyaa
    mainyaa 2014/03/28
    “愛は最適化によって消滅しました。”
  • Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?

    Appleは21日、iOSのソフトウェアアップデート7.0.6をリリースした。 iOS 7.1が早ければ3月中旬にもリリースされるとみられていたが、SSL接続の検証に関して、半月以上も待つことができない重大なバグが見つかったためだ。 SSLとは、「ウェブサイトで入力する個人情報やクレジットカード情報などを暗号化し、安全に送受信する技術」(Symantec)だ。データを安全にやりとりするために利用されている非常に重要な技術となっている。 そして今回、クライアント(ユーザ側)とサーバ(ウェブサイト側)の間をSSL接続する際のプログラムに、「BASIC初心者でも一目で分かるようなミス」(Wired)が見つかり、修正されることになったようだ。ミスがあったのは、以下の部分。 Appleが公開しているソースコード 「goto fail;」が2行続けて記述されている箇所に注目してほしい。2行目の「got

    Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?
    mainyaa
    mainyaa 2014/02/24
    mergeミスじゃね?って元コード読みに行ったらタブとスペースが混在してて死ぬかと思った
  • JavaScript Bindings for C and Objective-C | Zynga Engineering

    Introduction JavaScript Bindings for C / Objective-C (JSB) are the “glue” code (or wrapper code) that sit between native code (C or Objective-C) and JavaScript (JS) code. JSB allows calling native code from JS and vice-versa. That means that you can interact with your favorite native library from JS. As an example, you could create a cocos2d particle system in JS, while its logic and rendering wil

  • Tumblr

    はじめに JavaScript Advent Calendar 2011 (フレームワークコース) の17日目です。この記事では、C言語で書かれたアプリケーションを Javascript エンジン上で動かすためのツールである Emscripten について解説します。 Emscripten の原理 Emscripten はC言語のコードを Javascript のコードへ変換するツールですが、人間が移植作業を行うように「書き直し」をしてくれるものではありません。例として、以下のようなC言語のコードの移植を考えます。 #include <stdio.h> #define MESSAGE "Hello" int main() { int i; for (i = 0;i < 10;i++) { puts(MESSAGE); } return 0; } プログラマーが手作業で移植するなら、Java

    Tumblr
    mainyaa
    mainyaa 2012/10/17
    やばい。Emscripten超面白そう。NativeClientじゃなくてこっちに惹かれるなー
  • Andy Sloane's site – a1k0n.net

    Blog Posts 13 Nov 2018 » Fast line-following robots part 1: control 01 Feb 2017 » 3D Rendering on an Arduboy 09 Nov 2015 » Playing Fasttracker 2 .XM files in Javascript 20 Jul 2011 » Donut math: how donut.c works 26 Jun 2011 » Yahoo! Logo ASCII Animation in 462 bytes of C 04 Mar 2010 » Google AI Challenge post-mortem 17 Nov 2009 » Hacker challenge part 2 solution 03 Apr 2009 » Hacker challenge par

    mainyaa
    mainyaa 2011/07/08
    warning出るけどほんとに実行できた。これはすごい。
  • 静的コード解析ツール splint - すがブロ

    splint という解析ツールがある MacOSX だとデフォルトでは入っていないようだけど、port install splint でインストールできる。 これを使う事でバグが混在しやすいコードや、未使用の変数等を解析して教えてくれる。 ためしに使ってみる。 以前書いた正規表現のソースをチェックしてみる。 ソースはこんな内容 1 /* $Id: regex.c 39 2008-05-19 16:25:42Z sugamasao $ */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <regex.h> 5 6 int main(void) { 7 char* str = "<p>hoge</p>"; 8 regex_t reg; 9 regmatch_t* pmatch; 10 size_t nmatch; 11 12 /*

    静的コード解析ツール splint - すがブロ
  • perlembed - C プログラムへの Perl の埋め込み方 - perldoc.jp

    perlxstut, perlxs, h2xs, perlguts, perlapi を 読みましょう。 Use a Unix program from Perl? (Perl から UNIX プログラムを使うことですか?)

    mainyaa
    mainyaa 2011/05/03
  • 100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog

    例の冷却ファンを修理してもらいに秋葉原に行ったのですが、最近の同人ゲームのクオリティはすごいなあと感心していたら、その二階はもっととんでもないことになってて、ひとつ大人になってしまったmikioです。今回は、Tokyo Cabinetのテンプレート直列化機能を駆使して、たった100行のCプログラムでWebチャットシステムを実装してみます。 古式ゆかしいWebチャットシステム 10年くらい前にCGIスクリプトでチャットシステムを作るのが流行していたのを覚えている方も多いと思います。チャットログは現在のようにデータベースサーバに転送して格納するのではなく、ローカルファイルシステム上のファイルにCSVやTSVなどのフォーマットで格納したり、同じくローカルのDBMファイルに格納するのが主流でした。2ちゃんねるの「datファイル」もそのようなデータファイルの一種と言えるでしょう。 その頃から、CGI

    100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog
  • lsコマンドをハックしてみよう

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは、ショッピング事業部開発部の吉野です。 Yahoo!ショッピング開発部では新人エンジニア向けにコマンドのソースコードを読むことを奨励しています。 その初期の題材として、lsコマンドがよく挙げられます。 今回は「lsコマンドをハックしてみよう」と題し、lsコマンドについてお話しさせていただきます。 突然ですがエンジニアの皆さん、lsコマンドのソースコードを読んだことはありますか? 読んだことのない方はぜひ一度、目を通しておくことをおすすめします。 意外と知られていませんが、lsはcd,pwdなどのコマンドと違いシェルの組み込みコマンドではありません。 一口にlsと言っても、複数のソースコードが存在します。 代表的なのはGN

    lsコマンドをハックしてみよう
  • 2009-02-01

    Cでchompを書いてみます。 chompとはPerlの関数で、文字列の中の改行('\n')を削除します。 #include <stdio.h> #include <string.h> static char* chomp( char* str ) { int l = strlen( str ); if( l > 0 && str[l-1] == '\n' ) { str[l-1] = '\0'; } return str; } int main(void) { printf("%s", chomp("test\ntest2\ntest3")); return 0; } 実行結果 test test2 test3 Imager で魚眼っぽいフィルタつくったを参考にOpenCVで魚眼レンズフィルターを作ってみました。 #include <stdio.h> #include <cv.h> #i

    2009-02-01
    mainyaa
    mainyaa 2009/02/02
    OpenCVで魚眼レンズ
  • はやいTCPサーバを書く際に忘れがちなこと - kazuhoのメモ置き場

    はやいTCPサーバの書き方 - nyaxtのPC作業ログ で id:nyaxt さんが書いてらっしゃるように、 epoll や kqueue を使う TCP_NODELAY, TCP_DEFER_ACCEPT *1 等を活用する TCP パケットを意識する I/O システムコールの回数を最小にする sendfile といったあたりは、確実にやるべきことだと思います。一方で、TCP 関連以外のオーバーヘッドが実は結構あって、 接続のタイムアウト処理 ログの出力 メモリの確保や解放をやらない あたりにも気を配る必要がある、と思います。 接続のタイムアウト処理については、以前 Kazuho@Cybozu Labs: 高速なCometサーバを書いてみた件 に書いたように、ビットアレイのリングバッファを使うのがベストだと思います。 ログの出力について、複数行を1回のシステムコールにまとめてもいいかど

    はやいTCPサーバを書く際に忘れがちなこと - kazuhoのメモ置き場
  • OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん

    OMakeすごい。OMakeはマジですごい。 OMakeはGNU makeの代替品みたいなものなんだけど、正直なところこのツールの強力さはGNU makeと比べると失礼なくらいすごい。これのおかげで、「コード修正→ビルド→デバッグ→コード修正→・・・」のループの、ビルドにあたる作業がほぼ消え去った。 ファイルの依存関係の解析がとにかくすごい。よくあるユースケースなんかの場合、最小限の手間でほぼ完璧に依存関係を網羅して、よしなにビルドしてくれる。 とりあえず、はやみずが実際に使ってみたケースを例にとってそのすごさの一端を紹介しようと思う。 case study 論より証拠ということで、自分が OMake を試しにつかってみたケースを紹介する。C言語でスタティックライブラリを作っていて、それに加えて簡単なテストプログラムを書いている。 /include/ 以下にヘッダファイルが全部ある /sr

    OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん
  • ホワット・ア・ワンダフル・ワールド libtcc で C のソースコードを eval

    今さらながら,libtcc の素晴らしさに気付きました. libtcc を使用すると,動的に C プログラムソースコード (文字列) をオブジェクトコード (ELF) に変換してメモリ上にロードして実行して返り値を受け取ることができます.つまり,C コードを eval できる (面倒なので,返り値は int 限定.ちゃんとディスパッチすれば何でもいける). #include<stdio.h> #include "libtcc.h" int gargc;char **gargv; int eval(char *src) { TCCState *s; int result; s = tcc_new(); tcc_set_output_type(s, TCC_OUTPUT_MEMORY); tcc_compile_string(s, src); result = tcc_run(s, gargc

    mainyaa
    mainyaa 2008/06/06
  • Google Suggestのようなものを高速に実現するサーバsuggested - グニャラくんのグニャグニャ備忘録@はてな

    Google Suggestのようなものを高速に実現するサーバsuggestedというものを書いてみた。 が、しばらく放置していた。とりあえず公開してみる。 特徴 epollやkqueueを使っていてネットワーク部分が速い Sennaを使っていてSuggest部分が速い Sennaを使って正規化している。「トン」とか「ミリバール」(組み文字)とか「Wiki」(全角)とかでも検索可能 置き場 CodeResosに置いてあります。 http://svn.coderepos.org/share/lang/c/suggested/trunk 一応、2008/01/17バージョンの全ソースコードを貼っておこう。 #include <sys/types.h> #include <sys/time.h> #include <stdlib.h> #include <err.h> #include <sys

    Google Suggestのようなものを高速に実現するサーバsuggested - グニャラくんのグニャグニャ備忘録@はてな
    mainyaa
    mainyaa 2008/01/17
    よさげ
  • mixi Engineers’ Blog » 最適化しよう?

    エンジニアブログを私物化していると専らの評判のmikioです。ブログを書かないと死んでしまう病に冒されているのでしかたないですね。個人ブログ時代よりもわかりやすくする努力はしているんですけどね。さて、今回はソースコードの最適化による高速化について述べます。 ベンチマークテスト TCはQDBMや他のDBMより高速であるという主張をしたいのですが、その根拠としてベンチマークテストの結果が必要となります。そこで、データベースに100万レコードを格納する処理と、そうして作ったデータベースから全てのレコードを探索する処理の時間を、各DBMで計測してみました(TCのパッケージのbrosというディレクトリにテストコードが入っています)。実行環境は、Thinkpad T60(Intel(R) Core2 CPU T7200 @ 2.00GHz)上のLinux version 2.6.16です。 ハッシュ

    mixi Engineers’ Blog » 最適化しよう?
    mainyaa
    mainyaa 2007/11/13
    プロファイル計測して時間のかかる処理だけ最適化。
  • mixi Engineers’ Blog » 言語バインディングを書こう

    世田谷の某所から原宿まで自転車通勤しているのですが、そろそろ寒くなってきたので電車に切り替えようかと悩み中のmikioです。今回はTokyo Cabinetのスクリプト言語バインディングについて述べます。 スクリプト言語バインディングとは TCはC言語で実装されたライブラリで、C言語(C89、C99)およびC++言語のプログラムから利用することができます。CやC++は各種の計算処理やシステムコールの呼び出しを直接的に記述できるので高速に動作するプログラムを作ることができる反面、ポインタ演算やメモリ管理などで致命的なバグを潜ませやすいので非常に注意深くコーディングを進めなければいけません。つまり、プログラムの実行速度は速いが、開発速度は遅いということです。 それに対して、PerlRubyをはじめとするいわゆるスクリプト言語は、実行速度はCやC++に劣るものの、高水準かつ直感的な文法と強力な

    mixi Engineers’ Blog » 言語バインディングを書こう
    mainyaa
    mainyaa 2007/11/09
    前から気になってた。ありがたい。
  • 1