タグ

Cに関するmasutaka26のブックマーク (45)

  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
  • zero length array, flexible array - Shohei Yoshida's Diary

    github.com たまたま目に入ったこのコードを見ていて, zero length arrayって末尾のメンバ以外でも使えたんだって思って気になるところを調べてみた. Flexible array en.wikipedia.org C99から入った機能. 配列の長さを宣言しないことで利用できる. sizeofはできない. 構造体などの末尾フィールドに置くことができる. 典型的な使い方は以下のような感じ. struct Data { // some fields SomeData s[]; }; struct Data *d = malloc(sizeof(Data) + some_arbitrary_size); ポインタを使ってしまうと構造体とこの末尾のデータがある場所は別の領域になってしまうわけだが, このようにすることで連続するメモリにすべて割り当てることができる. 構造体の末尾

    zero length array, flexible array - Shohei Yoshida's Diary
    masutaka26
    masutaka26 2022/05/09
    懐かしい。けど使ったことはない機能 (^^;
  • TechCrunch

    [A version of this piece first appeared in TechCrunch’s robotics newsletter, Actuator. Subscribe here.] Earlier this month, Google’s DeepMind team debuted Open X-Embodiment, a database of robotic

    TechCrunch
    masutaka26
    masutaka26 2017/07/18
    C++ はとばっちりっぽい。
  • 【やじうまPC Watch】SIMD命令実行時にMacBook Airから出る電磁波でメリーさんの羊を鳴らす強者登場 ~無線転送用ハードウェアがないPCで無線転送を実現、AMラジオで受信可能 - PC Watch

    【やじうまPC Watch】SIMD命令実行時にMacBook Airから出る電磁波でメリーさんの羊を鳴らす強者登場 ~無線転送用ハードウェアがないPCで無線転送を実現、AMラジオで受信可能 - PC Watch
    masutaka26
    masutaka26 2016/03/02
    出来なかった。そういえばうちのは 2014 年早期モデルだった
  • ゲームボーイアドバンスのゲームを書こう | POSTD

    子どもの頃は、ゲームボーイのゲーム(たいがい、かなりひどいもの)で遊ぶのにたっぷり時間を費やしました。 これまでは「標準の」一般的な目的に使われるコンピュータ以外のためにコードを書いたことはなかったのですが、最近考えるようになりました。 「ゲームボーイ(アドバンス)のゲームは簡単に書けるだろうか?」 ゲーム機には詳しくない方のために説明すると、ゲームボーイアドバンス(GBA)は、任天堂が発売した人気携帯型ゲーム機でした(写真下)。 240 x 160 (3:2) 15ビット カラーLCDディスプレイ、6種類のボタンと十字キーが付いています。 ゲームボーイアドバンス 内部を見ると、GBAのCPUは32-bit ARM7TDMI RISCコア(16.78MHz)です。 標準の32-bit ARMのインストラクションのほかに、 このチップは16ビットThumb のインストラクションも実行できます

    ゲームボーイアドバンスのゲームを書こう | POSTD
  • 【CEDEC 2009】「石田の思いは皆さんに伝わった」,CEDEC AWARDS著述賞を受賞した故石田氏の夫人が挨拶

    「石田の思いは,ここにおられる開発者の皆さんに伝わったと思います」──故・石田晴久氏のである石田順子さんは,涙ながらに受賞への感謝の意を語った。 2009年3月に逝去した石田晴久氏は,日におけるUNIXやインターネットの普及に大きく貢献するとともに,『プログラミング言語C』(発行:共立出版)の訳者としても著名である。同書は,1982年の発行以来長らくC言語教育の教科書的存在として,技術書としては異例の発行部数48万部を超えるロングセラー書籍である。筆者であるBrian W. Kernighan氏とDennis M. Ritchie氏の頭文字をとった「K&R」と言えばそれと分かるほどにC言語開発者の必読書になっている。 ゲーム開発者の功績を称えるCEDEC AWARDS 2009では,石田氏が『プログラミング言語C』の1ほか多数の著作を通じて国内のソフトウエア産業に多大な貢献をもたらした

    【CEDEC 2009】「石田の思いは皆さんに伝わった」,CEDEC AWARDS著述賞を受賞した故石田氏の夫人が挨拶
    masutaka26
    masutaka26 2015/09/09
    『プログラミング言語C』は48万部!
  • C言語で可変長引数をとる関数を、型安全に書く方法

    C言語の可変長引数は、型安全でない(まちがった型の引数を渡してもコンパイルエラーにならない)とされています。これは言語仕様の理解としては正しいのですが、特定の型の引数を任意の個数とる関数に限っては、マクロを使うことで型安全性を確保することができます。 任意の個数のdoubleを引数にとり、その和を返す関数「sumf」を例にあげて説明します。 C言語の可変長引数機構を使ってsumfを定義すると、以下のようになります。 #include <math.h> #include <stdarg.h> #include <stdio.h> static double sumf(double nfirst, ...) { double r = 0, n; va_list args; va_start(args, nfirst); for (n = nfirst; ! isnan(n); n = va_a

    masutaka26
    masutaka26 2014/12/13
  • 増井雄一郎(@masuidrive)さんの「数十時間悩んだあげく1行で直るコード」問題解説記事 #c #mruby|CodeIQ MAGAZINE

    増井雄一郎(@masuidrive)さんの「数十時間悩んだあげく1行で直るコード」問題解説記事 #c #mruby 2013.12.12 Category:CodeIQ問題解説・リーダーボード Tag:C ,masuidrive ,mruby ,Ruby 増井雄一郎さんから初の問題!「数十時間悩んだあげく1行で直るコード」の解説記事です。 この問題は、実際に増井雄一郎さんとまつもとゆきひろさんのお二人が数十時間悩んだ結果解決した経験が元になっています。 あなたはこの問題解けましたか? by CodeIQ運営事務局 増井雄一郎です。 初のCodeIQへの出題でかなり緊張しましたが、想定より多くの方に答えていただき、驚きと喜びで一杯です。 出題後、問題文に”1行”と書いたことで混乱させてしまったかもしれないと不安になりましたが、解答を見ているとあまり問題ではなかったようで安心しました。 問題文

    増井雄一郎(@masuidrive)さんの「数十時間悩んだあげく1行で直るコード」問題解説記事 #c #mruby|CodeIQ MAGAZINE
    masutaka26
    masutaka26 2013/12/13
  • テストフレームワークのほうのUnityでC言語でもTDDを試す - Bye Bye Moore

    奥さん、僕ぁC言語でもTDDしたいんですよ! ……というわけで、Rubyで実現する素敵なC言語TDD環境、Unityです。 3Dゲームを作るアレではなく、TDD用テストフレームワークです。 UnityRubyistにはお馴染みのRackを使っています。 Ruby&Rack環境が方は先に導入しておいて下さい。 導入が終わりましたら、 "公式様"にとんで頂き、 下の方にある「download unity」から圧縮ファイルを入手します。 これを解凍すると色々と並んでいます……が 今回用があるのはexampleです。 これの中身を詳しく見て行くと $ ls examples/ helper rakefile_helper.rb test makefile readme.txt test1.out rakefile.rb src test2.outとなっています。 テスト対象のファイルはsrc、

    テストフレームワークのほうのUnityでC言語でもTDDを試す - Bye Bye Moore
    masutaka26
    masutaka26 2013/11/11
    C言語でTDD
  • 文字列検索(BM法)

    Boyer-Mooreのアルゴリズム BM法の原理 KMP法は『理論的には優れているが,実戦には弱い』 というアルゴリズム でした。 これに対して,BM法は『理論的にも優れていて,実戦にも強い』 と いう頼もしいアルゴリズムです。 実用的には,BM法は最も速い文字列探索ア ルゴリズムだということができます。パターンとテキストを重ね合わせて,末尾から先頭に向かって順番に文字を 比較していき,パターンとテキストの不一致が見つかったら,不一致の原因に なった文字に応じてパターンをずらす分量を決める,というのがBM法の考 え方です。 たとえば,左の図のようにテキストabdefghにパターンabcを重ね合わ せて比較することを考えましょう。 まずパターンの最後の文字をテキストと比 較します(左図(1))。 パターンの最後の文字はcで,対応するテキストは dになっています。

    masutaka26
    masutaka26 2013/11/08
    GNU Grepでも使われているボイヤー-ムーア文字列検索アルゴリズム
  • GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ

    RubyPythonなどのスクリプト言語では実行中に例外が発生するとバックトレースを出力してくれます。バックトレースがあるとどこで問題が発生したかがわかるためデバッグに便利です。一方、CやC++では不正なメモリアクセスをすると、バックトレースではなくcoreを残して1終了します2。デバッガーでcoreを解析するとバックトレースを確認できます。 このように、CやC++でデバッグするときにデバッガーはなくてはならない存在です。スクリプト言語にもデバッガーはありますが、デバッガーを使わなくてもデバッグできる範囲が広いため、CやC++をデバッグするときのほうがデバッガーのありがたさがわかります。 この記事では、広く使われているデバッガーであるGDBをもっと便利に使うためのGCCのコンパイルオプション-g3を紹介します。 サンプルプログラム まず、この記事で使うサンプルプログラムを示します。マクロ

    GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ
    masutaka26
    masutaka26 2013/05/09
    おおすげー。できた。『-g3オプションを指定するとGDB内でマクロを使えるようになります。』
  • #define MUST_GET 1 /* - 書評 - Head First C */ : 404 Blog Not Found

    2013年04月12日19:00 カテゴリ書評/画評/品評Lightweight Languages #define MUST_GET 1 /* - 書評 - Head First C */ 出版社より献御礼。 Head First C David Griffiths・ Dawn Griffiths / 中田 秀基・ 木下 哲也訳 [原著Head First C] やってくれたのは、やはり結局 O'Reillyだったか。 404 Blog Not Found:(弘法も筆の誤り||まろび出た馬脚)? - 書評 - しろうとクマくんとC言語の授業 その意味で、今もってK&Rを超えるCというのは、「初心者」まで含めても今なお存在しないようだ。C99も出て久しいし、そろそろ出てもいいと思うのだが。 書「Head First C」は、今まで私が出会ったC言語に関するの中で最良の一冊。「入門」

    #define MUST_GET 1 /* - 書評 - Head First C */ : 404 Blog Not Found
    masutaka26
    masutaka26 2013/04/12
    すげー『ary[42]と42[ary]の同一性まできっちり説明しているなんて』
  • へ、変態っ!!読めないからやめてっ!bit使ったデータ構造・アルゴリズム実装集 - Negative/Positive Thinking

    この記事はCompetitive Programming Advent Calendar Div2012の2日目の記事です。 12月20日追記: Darseinさんが20日目の記事で、ビット演算についての詳しい説明を紹介してくださっています!必読ですね!!!!:) はじめに Y^´       ∨// /,∠ ,. ' /l/// /, ' , '/ ! | l }´     〈 〉    変  〈/ , ' // ̄`>< /// /// _,.=‐|'"´l l〈  変  / 〈    態.   ∨, '/l|   ,.'-‐、`//`7/  /''"´__ | ハ l丿  態   { 人)   ! !   (/!  |ヽ〈_ ・.ノ〃  〃 /  '/⌒ヾ.! ,' !く   ! !  (_ ト、__/   ヽ、_,.イ    /l l |:::::::```/:::::/...´..

    へ、変態っ!!読めないからやめてっ!bit使ったデータ構造・アルゴリズム実装集 - Negative/Positive Thinking
  • Linuxで3万(10万)プロセスを同時に起動させてみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 といっても、きちんとした検証をしたわけではないので、あくまで「こういう環境でこういう事をやるとこうなる」という参考程度のものと理解してい頂ければ幸いです。 Linux上でプロセスは同時に何個起動できるのか 数年前にC10K問題が流行りました。これは、簡単に言うと、万のオーダーでプロセスを立ち上げる事になると、現状のOSではそれを想定した設計になっていないためまともに動かなくなる、といった問題でした。 だったら、「10万プロセス位を同時に立ち上げてみて、どうなるか試してみようぜ!」と思い、会社のエンジニアと一緒に試してみました。検証環境は、メモリ48GでCPUはHyperThreading込で24コアです。そこで動いていたOSはDebianでL

    Linuxで3万(10万)プロセスを同時に起動させてみた
  • CPU とキャッシュのはなし - graphics.hatenablog.com

    別にグラフィックスに限ったことじゃないし、そもそも論文とか全然関係ないけど。GPU 周りでもたまに話題になるし、自分でもたまにわけわからんくなるから整理しとく。 メインメモリは遅い CPU からメインメモリにデータを読みに行く場合、これはとにかく遅い。例えばレジスタにあるデータを読みに行く場合と比べると、だいたい数倍から数100倍の遅さ。ヤバいからなんとかしよう。もっと早くアクセスできる場所にデータおいとこう。 キャッシュライン CPU がメインメモリからデータを読み出すとき、必ず小さなメモリチャンクをキャッシュ上にロードする。ロード単位はプロセッサによるけど、だいたい 8 ~ 512 バイト。このロード単位をキャッシュラインと呼ぶ。 アクセス対象のデータが既にキャッシュに載ってる場合は、メインメモリじゃなくてキャッシュを読みに行く。ない場合はメインメモリにアクセスするけど、そのデータはも

    CPU とキャッシュのはなし - graphics.hatenablog.com
    masutaka26
    masutaka26 2012/05/11
    懐かしい。
  • システムコールと標準ライブラリ関数の違いを知る

    前回解説したように、システムコールは魔法の関数でもなければ、不思議なものでもなく、カーネルに正直に処理を依頼するものです。今回は、標準ライブラリ関数との違いについて解説します。(編集部) システムコールを使ってみる前に 今回から簡単なシステムコールプログラミングを通じて、いわゆる「システムコール」がどういったものであるかを紹介していこうと思う。システムコールに触れるための環境をどう構築するかという点については、連載:いまさら聞けないVim 第8回「Vimをプログラム開発環境にしてしまおう」に詳しくまとめてある。こちらを参考に環境を構築してほしい。 先に挙げた記事では、FreeBSDとUbuntuを例として環境構築法を解説している。ほかの環境(Mac OS X Lion、Ubuntu 11.10、Solaris 11)を使われている方のために、使用するコマンドをそれぞれの環境で置き換える方法

    システムコールと標準ライブラリ関数の違いを知る
  • 真夜中のmalloc

    K. Sakaguchi @pi8027 そういえば mmap を使ってメモリ確保できるよねっていう有名な話がありますけど、あれって malloc で同じサイズ取ってくるのに比べて何か利点あるんですか。 2011-02-12 23:56:40

    真夜中のmalloc
    masutaka26
    masutaka26 2012/02/23
    『そういえば mmap を使ってメモリ確保できるよねっていう有名な話がありますけど、あれって malloc で同じサイズ取ってくるのに比べて何か利点あるんですか。』
  • OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん

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

    OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん
    masutaka26
    masutaka26 2011/12/11
  • Do I need -D_REENTRANT with -pthreads?

    On Linux (kernel 2.6.5) our build system calls gcc with -D_REENTRANT. Is this still required when using pthreads? How is it related to gcc -pthread option? I understand that I should use -pthread with pthreads, do I still need -D_REENTRANT? On a side note, is there any difference that you know off between the usage of REENTRANT between gcc 3.3.3 and gcc 4.x.x ? When I use -pthread gcc option I can

    Do I need -D_REENTRANT with -pthreads?
    masutaka26
    masutaka26 2011/12/09
  • CPUID for SIMD Detection

    cpuid is an instruction added to Intel Pentiums (and some later 80486's) that enables programmers to determine what kind of features the current CPU supports, who made it, various extensions and abilities, and cache information. This article will show you how to get information using cpuid, and how to interpret that information to detect support for MMX and its extensions, 3DNow! and its extension

    masutaka26
    masutaka26 2011/12/03