[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

cに関するtanakaBoxのブックマーク (142)

  • malloc.c を読む (malloc / free)

    このシリーズではこれらの関数が内部でどのように処理されるのかを調べていきます。 malloc.c を読む (malloc / free) malloc.c を読む (bins) malloc.c を読む (arena) 今回は malloc() free() の全体像を紹介します。 注意としてここでの目的は全体を俯瞰して、詳細を詰めずとも各 bins の役割を理解し、攻撃手法を理解できるようにすることです。それに合わないマルチスレッドや最適化などにおける緻密なトリックやコーナーケースなどは暗黙的に実装されていると仮定します。その詳細についてはソースコードや他の資料を参考にしていただきたいです。 ここで扱う glibc のバージョンは v2.38 です。また glibc のソースコードはブラウザ上で読むことができます。 https://elixir.bootlin.com/glibc/lat

    malloc.c を読む (malloc / free)
    tanakaBox
    tanakaBox 2024/07/17
  • Freedom and Portability

    The economic advantages of portability are very great. In many segments of the computer industry, the dominant cost is development and maintenance of software. Dennis Ritchie and Stephen Johnson 1978 … many insist that C is the programming language and that it will last forever. Byte Magazine 1983 The August 1983 issue of Byte Magazine devoted its cover, and a large part of its editorial content,

    Freedom and Portability
    tanakaBox
    tanakaBox 2024/06/04
  • C programming language extension: Cedro pre-processor

    Cedro Español, English Cedro is a C language extension that works as a pre-processor with eight features: The backstitch macro x@ f(), g(y); → f(x); g(x, y); (related work). Deferred resource release auto ... or defer ... (related work). Break out of nested loops break label; (related work). Notation for array slices array[start..end] (related work). Block macros #define { ... #define }. Loop macr

    tanakaBox
    tanakaBox 2021/08/16
  • How to debug C and C++ programs with rr | Red Hat Developer

    The common theme in many time-travel movies is to go back in time to find out what went wrong and fix it. Developers also have that desire to go back in time and find why the code broke and fix it. But, often, that crucial step where everything went wrong happened long ago, and the information is no longer available. The rr project lets programmers examine the entire life of a C or C++ program run

    How to debug C and C++ programs with rr | Red Hat Developer
  • Articles On Linux, Command-line & Software Engineering

    Home Store Blog Contact Home Store Blog Contact #linux | #commandline | #softwareengineering | #embeddedsystems | #compilers ... View All >> Recent Articles View All Recent Articles Intro To 'logout' Command In LinuxPublished 2024-11-13 Intro To 'reboot' Command In LinuxPublished 2024-09-24 Intro To 'shutdown' Command In LinuxPublished 2024-08-30 Terminal Block Mining Simulation Game v0.0.4 Releas

    tanakaBox
    tanakaBox 2021/01/30
  • C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD

    ビジターの皆さんへ C言語に関心を寄せていただきありがとうございます。このページは、C言語の面白い問題、パズルのリストです。これまでに友人たちからeメールで送ってもらったり、で読んだり、インターネットで見つけたり、あるいは自分でC言語でコーディングしていて気づいたりしたプログラムを集めました。 多くのプログラムは、コンパイル、実行され、その振る舞いを示すものです。問題は大まかに次のカテゴリに分けられます。 一般的なタイポエラー。C言語プログラマが頻繁に犯すミスであり、かつ追跡が困難。 初見では非常に理解しがたい小さなプログラム。これらの問題は、他人が書いた優れたコードを読み解く良い訓練になります。 また、全てにGnu/Linux/gccを使っています。掲載順は、それぞれの難易度とは関係ありません。問題解決の助けが必要な場合は、気軽に私に問い合わせてください。連絡先は こちら です。また、

    C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD
    tanakaBox
    tanakaBox 2020/12/31
  • Linuxカーネルで学ぶC言語のマクロ - 覚書

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。 #define swap(a, b) \ do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) 注目すべきはマクロの定義全体を囲んでいるdo { ... } while (0)という表記です。初見の人には何のことかわからないと思います。考えられる最も単純な定義から遡って、なぜこ

    Linuxカーネルで学ぶC言語のマクロ - 覚書
    tanakaBox
    tanakaBox 2020/10/16
  • C で関数に * や & を付けられる件の説明 - Qiita

    規格として C11 (n1570) を参照する。 注意: 途中に入れた図が崩れるようなら、半角・全角比が 1:2 になるようなフォントを使って閲覧してください。 現象 wandbox で実行 ソース: ( &printf)(" &printf = %p\n", &printf); printf (" printf = %p\n", printf); ( *printf)(" *printf = %p\n", *printf); ( **printf)(" **printf = %p\n", **printf); (***printf)("***printf = %p\n", ***printf); この現象を解説する。 関数呼び出し まず、関数呼び出しについての規定を見る。 The expression that denotes the called function shall have

    C で関数に * や & を付けられる件の説明 - Qiita
    tanakaBox
    tanakaBox 2019/08/22
  • printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita

    def check(n) s = "*"*n f = open("test.cpp","w") f.puts <<EOS #include <cstdio> int main(){ (#{s}printf)("Hello World\\n"); } EOS f.close() return system("clang++ test.cpp") end check(ARGV[0].to_i) $ ruby check.rb 10000 clang: error: unable to execute command: Illegal instruction: 4 clang: error: clang frontend command failed due to signal (use -v to see invocation) Apple LLVM version 10.0.1 (clang

    printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita
    tanakaBox
    tanakaBox 2019/08/22
  • 2016年、C言語はどう書くべきか (後編) | POSTD

    (前編はこちら: 2016年、C言語はどう書くべきか (前編) ) (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) システム依存の型 まだ「32 bitのプラットフォームでは32 bitのlong型、64 bitのプラットフォームでは64 bitのlong型がいい」という不満があるようですね。 プラットフォームに依存する2つの異なるサイズを使うため、 故意に コードを難しくすることを考えたくなければ、システム依存の型のために long を使おうとは思わないでしょう。 この状況では、プラットフォームのためにポインタ値を保持する整数型、 intptr_t を使うべきです。 モダン32-bitプラットフォームでは、 intptr_t は int32_t です。 モダン64-bitプラットフォームでは、 intptr_t は int64_t です。 int

    2016年、C言語はどう書くべきか (後編) | POSTD
    tanakaBox
    tanakaBox 2019/08/12
  • Cello - もはや別物、C言語で高レベルプログラミングを実現するライブラリ | ソフトアンテナ

    C言語は機械語やアセンブリ言語といった低水準言語に近く、最近流行のPythonRubyといった高水準言語で利用できるさまざまな便利な機能を使用することができません。例えば文字列にも専用の型が存在せず、さまざまな落とし穴に注意しつつ慎重に使用する必要があるのです。 日紹介する「Cello」は、このなにかと不便なC言語で、高レベルプログラミングを実現するユニークなライブラリです。 Cellは以下の機能を実現するC言語用ライブラリです。 一般的なデータ構造 ポリモーフィック関数 インターフェイス/タイプクラス コンストラクタとデストラクタ オプションのガベージコレクション 例外 リフレクション 作者のDaniel Holden氏は、Ubisoft Montrealのアニメーション研究員で、C言語の可能性を追求するためのファンプロジェクトとしてCelloの開発を始めたと開発の動機を説明していま

    Cello - もはや別物、C言語で高レベルプログラミングを実現するライブラリ | ソフトアンテナ
    tanakaBox
    tanakaBox 2019/04/19
  • 【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報

    C言語で引数なしの関数を書くときに void を書かないのと書くのとで挙動が違うなんて話を聞いたことはないでしょうか? つまり void func() {} と void func(void) {} で挙動が違うという話ですね。 自分も話だけ聞いたことがあったものの2つがどう違うのかはわかっていなかったため、C言語の規格を読みながら何が違うのかを調べてみました。 結果だけ述べると、この2つの書き方は同じように見えて実は明確な違いがあり、引数がない関数を定義/宣言する場合には後者を使うのが適切です。 とは言え、2つの書き方で違いがあるとかほんとかよ?と思う方もいると思うので、まずはこの二つがどう違うのか見ていきましょう。 2つの関数の書き方の違い 早速ですが、以下のプログラムを見てみましょう。 // func_empty.c void func() {} int main(void) { f

    【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報
    tanakaBox
    tanakaBox 2019/04/19
  • Open Standards

    The site www.open-std.org is holding a number of web pages for groups producing open standards: ISO/IEC JTC1/SC2 - character sets WG3 - 7- and 8-bits character sets ISO/IEC JTC1/SC22 - Programming languages and, operating systems WG9 - Ada WG11 - Binding Techniques WG14 - C WG15 - POSIX WG16 - ISLISP WG19 - Formal Specification Languages WG20 - Internationalization WG21 - C++ WG23 - Programming La

    tanakaBox
    tanakaBox 2019/01/21
    規格
  • Expressing C-Language Syntax in Higher-Order Grammar

    スタートC language面白論文紹介&読み会 発表者: kinaba 面白い論文が 見つからなかった ので 捏造 Towards Higher-Order Syntax of C Programming Language なぜか。 Cの文法は文脈自由ではないと言われる なぜか。 Cの文法は文脈自由ではないと言われる FILE *fp; width * height; n = (size_t)*ptr; f = (m) * a; strdup(*argv)[9]; byte (*bufs)[9]; puts(str); clock_t (t); すごくどうでもいいんですけど、いろいろ面白いですね。 (a(*)(b))*c; (a)*b*c; (a*)b*c; (a*b)*c; (a*b*c); a(*b)*c; a(*b*c); a*(b)*c; a*(b*)c; a*(b*c); a*

    tanakaBox
    tanakaBox 2019/01/17
  • C言語でhello worldを書く - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    C言語でhello worldを書く - Qiita
    tanakaBox
    tanakaBox 2019/01/08
  • [PDF] Programming languages — C ISO/IEC 9899:201x

    N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x Programming languages — C ABSTRACT (Cover sheet to be provided by ISO Secretariat.) This International Standard specifies the form and establishes the interpretation of programs expressed in the programming language C. Its purpose is to promote portability, reliability, maintainability, and e

    tanakaBox
    tanakaBox 2018/11/11
  • mallocの動作を追いかける(mmap編) - Qiita

    はじめに malloc動画見てますか?>挨拶 こんな記事に興味持つような人はみんなmalloc動画見てる人たちばかりだと思いますが、僕はmalloc動画見るまでは「え?メモリの管理ってOS側じゃなくてユーザランドでやってたの?」って感じでした。ここでは僕みたいなmalloc初心者のために、mallocの動作を実際に追いかけて見ようと思います。 mallocの動作を追いかける(mmap編) ← イマココ mallocの動作を追いかける(prev_size編) mallocの動作を追いかける(main_arenaとsbrk編) mallocの動作を追いかける(fastbins編) mallocの動作を追いかける(マルチスレッド編) mallocの動作を追いかける(環境変数編) mallocについて mallocについては、それこそmalloc動画とか、このへんを見ていただければと思うけれど、要

    mallocの動作を追いかける(mmap編) - Qiita
    tanakaBox
    tanakaBox 2018/07/03
  • 私はC言語を知らない | POSTD

    (注:2017/04/27、いただいたフィードバックを元に翻訳を修正いたしました。) この記事では、皆さん(特にC言語のプログラマ)に「自分はCを分かっていなかった」と気付いてもらうことを目標にしています。 Cの落とし穴は、思っているよりもずっと身近なところにあります。ちょっとしたコードにも 未定義の動作 が潜んでいることを以下で示しましょう。 この記事はQ&A形式になっており、それぞれの例題は独立したソースコードとして扱ってください。 1. Q: これは正しいコードでしょうか? (変数の二重定義エラーが発生するでしょうか。上述の通り、これは独立したソースファイルであり、関数体や複合ステートメントの一部ではありません) 解答 A: 正しいコードです。1行目は仮定義であり、2行目でコンパイラが処理した後に “定義” になります。 2. extern void bar(void); void

    私はC言語を知らない | POSTD
    tanakaBox
    tanakaBox 2018/04/06
  • linuxカーネルで学ぶC言語のマクロ - Qiita

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。

    linuxカーネルで学ぶC言語のマクロ - Qiita
    tanakaBox
    tanakaBox 2017/03/06
  • Implementing smart pointers for the C programming language

    I am a big fan of C, but some part of me always yearn to have just enough higher level constructs. The impracticality of memory allocation in C is one of my pet peeves. Being very easily distracted, I tend to forget to free my memory, or close my resources, so you might guess that when I learned about smart pointers in C++, I was immediately hooked. As a freshman in my IT engineering school, our f

    tanakaBox
    tanakaBox 2015/01/19