タグ

cとc++に関するy_rのブックマーク (13)

  • 闇のC++ Undefined Behaviorに対する防衛術 - Qiita

    はじめに この記事ではC++11以降を扱います。 適宜規格書を参照しますが、翻訳する暇がないのでしません。 英語がわからない場合、雰囲気で頑張ってください。 C++ MIX #1 で発表したことの焼き増しです。 恥ずかしながら、発表に派手にミスがあったので修正後のスライドを上げてます。 Undefined Behaviorと愉快な仲間たち Undefined Behaviorは長いので以降UBと略すことにする。 UBが起こるとどうなるか なんでもあり。 コンパイラがどんなコードを生成しても規格書上合法。 別にHDの中身を全部消すコードを吐き出しても問題ない、そんなことはありえないが。 UBが起こると、そのあとの挙動は一切不明で何が起こるか保証されない。 なので、UBは絶対に起こしてはならない。 何故か無限ループしているが、理由がわからなかったり。 いつの間にかかオブジェクトが死んでたり。

    闇のC++ Undefined Behaviorに対する防衛術 - Qiita
  • clang/gccに組み込まれたAddressSanitizer/LeakSanitizerでメモリエラーを捕捉する - 千里霧中

    C/C++でのユニットテストによるメモリリーク検出 - 千里霧中の補足。 メモリエラーの検出方法についてだけれど、最近のclangやgccだと、AddressSanitizerという動的解析ツールが組み込まれており、それを活用できる。 使用する場合はコンパイラオプション「-fsanitize=address」「-fsanitize=leak」等を指定する。 題材 例えば以下のコードを対象にする。 //main.c #include <stdio.h> #include <stdlib.h> void hoge(void) { int *a_buff = (int *)malloc(5 * sizeof(int)); a_buff[10] = 8; } int main(void) { printf("test\n"); hoge(); return 0; } これを普通にコンパイルして実行

    clang/gccに組み込まれたAddressSanitizer/LeakSanitizerでメモリエラーを捕捉する - 千里霧中
    y_r
    y_r 2019/04/03
  • AddressSanitizer

    Introduction AddressSanitizer (aka ASan) is a memory error detector for C/C++. It finds: Use after free (dangling pointer dereference) Heap buffer overflow Stack buffer overflow Global buffer overflow Use after return Use after scope Initialization order bugs Memory leaks This tool is very fast. The average slowdown of the instrumented program is ~2x (see AddressSanitizerPerformanceNumbers). The t

    AddressSanitizer
    y_r
    y_r 2019/04/03
    メモリデバッグのおともに / gcc 4.8 以降なら -fsanitize=address で使える模様
  • c2e01b17fa037460937f

    こんにちは。 最近はC言語で書かれたAndroid/iOS SDKのプロジェクトjoinしまして、ビルドや単体テストの自動化について色々試行錯誤しております。 最初はMakefileで色々頑張っていたのですが、前から試してみたかったninja-buildというビルドツールを使ってみて、意外と便利だったため共有します。 apple/swift のビルドにも使われていたので、CやC++の皆さんの間では有名なのかもしれませんね。オープンソースで、C++で実装されているようです。 https://ninja-build.org https://github.com/ninja-build/ninja *Windowsでも使えるようですが、この記事ではMacで動作確認しております。 homebrewでインストールできました。

    c2e01b17fa037460937f
    y_r
    y_r 2018/10/23
    ”差分ビルドが賢いninja-build”
  • 「pthreadサポート」の意味するところ - yohhoyの日記

    ある処理系が “POSIXスレッド(pthread)標準をサポートする” とき、処理系(実行環境を含む)で担保すべき事項と、利用者(アプリケーションプログラマ)が守るべき制約についてメモ。 アプリケーションをプログラマの意図通り実行させるための、処理系/利用者間の責任分解点は「メモリ同期(memory synchronization)」により定義される。 利用者:複数スレッドからの少なくともどれか1つが書込操作となる変数アクセスの場合、“メモリ同期関数” を用いた排他制御により変数アクセスが同時に生じないよう保証すること。 全てが読込操作である変数アクセスの場合、複数スレッドからの変数アクセスを同時に行ってもよい。(そのようなコードを書いても、意図通り実行されることが保証されている。) 処理系:コンパイル時に最適化を行う場合でも、あるスレッド内での変数アクセス操作を “メモリ同期関数” 呼

    「pthreadサポート」の意味するところ - yohhoyの日記
    y_r
    y_r 2018/06/28
    POSIX の規格により volatile 必要なし
  • Are mutex lock functions sufficient without volatile?

    y_r
    y_r 2018/06/28
    見解が分かれているが "pthred_mutex_xxx でメモリバリアがはられているので大丈夫" が正しいっぽい
  • DCL38-C. フレキシブル配列メンバには正しい構文を使用する

    DCL38-C. フレキシブル配列メンバには正しい構文を使用する フレキシブル配列メンバ(flexible array member)とは、2 つ以上の名前付きメンバをもつ構造体の最後のメンバが不完全配列型、つまり、構造体の中で配列のサイズが明確に指定されていない、特殊な型になっている配列を指す。struct hack と呼ばれるこの手法は広く使われており、さまざまなコンパイラが対応している。それゆえ、フレキシブル配列メンバの宣言にはさまざまな構文が使用されてきた。C 標準に適合した実装では、C 標準によって有効であると保証されている構文を使用すること。 フレキシブル配列メンバは、C 標準のセクション 6.7.2.1 パラグラフ 18 において次のように定義されている[ISO/IEC 9899:2011]。 特別な場合として、2 つ以上の名前付きメンバをもつ構造体の最後のメンバは、不完全配

    DCL38-C. フレキシブル配列メンバには正しい構文を使用する
    y_r
    y_r 2017/12/11
    構造体の最後のメンバのサイズ以上の領域を確保して、そのメンバを実質的に不定長配列として扱うのは未定義ではない。
  • alloca関数 - Qiita

    C言語で動的なサイズのメモリ確保が必要となれば、典型的にはmallocとfreeの出番ですが、allocaというものもあります。 C言語での変数の寿命 オブジェクト指向な言語の多くでは、ガベージコレクタが入っているので、「オブジェクトの寿命」≒「オブジェクトへの参照が存在する間」ということになります。これに対して、C言語(やC++)では、ガベージコレクタのような高度な仕組みはないので、変数の寿命は次の2つのどちらかになります。そして、C11で加わった可変長配列を別として、配列を確保するときもサイズは固定のしか取れません。 自動変数…スコープに入ったところで変数が用意され、スコープを抜けたところで解放される 静的変数・外部変数…プログラムの開始から終了まで存在し続ける これらに当てはまらない操作をしようと思えば、ライブラリ関数を使ってポインタ経由で使うほかありません。 allocaとは ふつ

    alloca関数 - Qiita
    y_r
    y_r 2017/05/21
    alloca 知らんかった...
  • [Linux][C/C++] backtrace取得方法まとめ - Qiita

    __builtin_return_address() を使用する __builtin_return_address() を利用することで、callerのアドレスを取得できる。 引数の数値を増やすことで、更に上の呼び出し元を参照できる。 #include <stdio.h> #define __USE_GNU #include <dlfcn.h> void hoge() { Dl_info info; dladdr(__builtin_return_address(0), &info); fprintf(stderr, "%s : __builtin_return_address => %p\n", __func__, __builtin_return_address(0)); fprintf(stderr, "%s : Dl_info.dli_fname => %s\n", __func_

    [Linux][C/C++] backtrace取得方法まとめ - Qiita
  • 普通のやつらの下を行け: 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

    y_r
    y_r 2017/02/16
    困った時の奥の手
  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

    y_r
    y_r 2009/09/25
    VC と GCC でソース共有をするために
  • いやなブログ: Cのポインタを整数に変換する

    Cのポインタを整数に変換する Cのポインタを整数に変換したいときがあります。このとき問題になるのは、ポインタのサイズが int と同じとは限らないということです。たとえば、 x86_64 の 64ビットのバイナリでは sizeof(int) = 4, sizeof(void *) = 8 となります。ポインタと同じサイズの整数を使いたい場合は C99 で導入された stdint.h で提供される intptr_t または uintptr_t を使います。 stdint.h には他にも int32_t や int64_t など、サイズつきの整数の型も提供されています。たとえば、uint64_t を使うと、64ビットの符合なし整数を扱うことができます。 私の場合、C++ のプログラムで void * から直接 uint64_t にキャストしようとしてはまりました。次のプログラムを x86_32

    y_r
    y_r 2009/09/18
    ポインタのビット幅問題にわずらわされないために uintptr_t または intptr_t を使え。
  • Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center

    All Microsoft Global Microsoft 365 Teams Copilot Windows Surface Xbox Deals Small Business Support Software Windows Apps AI Outlook OneDrive Microsoft Teams OneNote Microsoft Edge Skype PCs & Devices Computers Shop Xbox Accessories VR & mixed reality Certified Refurbished Trade-in for cash Entertainment Xbox Game Pass Ultimate PC Game Pass Xbox games PC and Windows games Movies & TV Business Micro

    y_r
    y_r 2009/09/17
    char ⇔ wchar_t とか
  • 1