タグ

gccに関するmohnoのブックマーク (13)

  • 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)
    mohno
    mohno 2024/07/17
    malloc/freeの作りが雑だとメモリーの確保/解放の順序でパフォーマンスに差が出るので、各社のコンパイラがしのぎを削っていた。前世紀ですでに数千行レベルだった記憶(なので読もうとは思わなかった)
  • C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -

    C言語(C++を含む)を習得したい人,ポインタを勉強したい人はgcc-14を使いましょう.難しいところは gcc-14 が丁寧に解説してくれます C言語の難しいところ 例を示します.C言語で記述された,たった6行のソースコードです int main() { int buf[10]; buf[10] = 0; return 0; } このソースコードには問題があります.初見でわかるでしょうか? : : : 問題があるのは buf[10]=0 の部分です.C言語でやりがちなミスですが,これがバグやセキュリティホールの原因になります. C言語が難しい理由は二つあります.この手の問題を見逃しやすい点と,この手の問題を理解することが難しい点の二つです gcc 14 に解説してもらいましょう 上記の6行のソースコードをgcc14を使ってコンパイルしてみます ソースコードのファイル名は test.c と

    C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -
    mohno
    mohno 2024/06/11
    gcc 14が新しいのか古いのかも知らなかったが新しいんだな。「gcc 14を使うと,問題がある場合はその理由をアスキーアートで解説してくれるようになりました」←コンパイル時に分かるヤツは、ってことか。
  • 「//このコメントを消したら動かない」は大体Shift_JISの2バイト目が原因で発生する - Qiita

    TL;DR Shift_JISにしただけでコンパイラが通らなくなる恐ろしい事件とその回避法について。 \ (¥)のASCIIコードは0x5c 表、能は良くない UTF-8は神 2023/12/06追記 誤りがあったので訂正します。こんな読まれると思ってなかったので正直ちょっとびっくりしていますが、いろいろコメントありがとうございました。(ツイート等全て拝見しました。) Shift_JISが悪いわけではない(デフォルトのエンコーディング設定の問題)→追記しました UTF-8にはUTF-FSSという仕様でこの問題が回避されている→マジでタメになる知識ありがとうございます OSによってデフォルトのエンコーディング設定が異なるせいで、デフォルト環境での動作がOSにより異なる→なるほど?(調査中) CRLFとLF問題では→なるほど?(調査中) そんな問題何を今更→UTF-8が出てから生まれたからです

    「//このコメントを消したら動かない」は大体Shift_JISの2バイト目が原因で発生する - Qiita
    mohno
    mohno 2023/12/05
    「Windowsのgcc/g++とMac/Linuxのそれとでは異なっていて」←Mac/LinuxでShiftJIS?普通に文字列が文字化けするのでは?なんか違う気がする。/↓以前はShiftJISを受け付けるオプションがあったのか。でもなあ。そこじゃない予感。
  • Pythonコードを35000倍に高速化したい

    はじめに Pythonは世界的にも人気のあるプログラミング言語ですが、実行速度については課題があります。Pythonの実行速度を高速化したい、という要求は根強く、これまでにも様々な処理系が開発されています。 この記事はPythonで書かれたコードを35000倍に高速化するにはどのような方法があるかについてまとめたものです。 この記事は: Pythonで書かれたアルゴリズムを35000倍に高速化する 事前コンパイル、並列化、SIMD演算を駆使する 最終的に44000倍まで高速化できた なぜ35000倍? 2023年5月2日にModular社よりPythonの使いやすさとC言語の性能を兼ね備える新しいプログラミング言語、Mojoの開発について発表がありました。低レベルのハードウェア向けにコンパイル可能なこと、文法的にはPythonを踏襲しており、既存のPythonライブラリを利用可能であること

    Pythonコードを35000倍に高速化したい
    mohno
    mohno 2023/05/07
    「逆転の発想として、C++を高速化するのではなく、比較対象のPythonを遅くすればどうでしょう?」←逆転すぎるけど、structの導入から考えてもありそう。「比較元のPythonコードは公開されていない」←そうなんだ。
  • 「バグを意図的にバグのまま残す」という選択肢がある

    はじめに gcc v12.1において、C++の正規表現ライブラリstd::regexに、正規表現のバリデーションを改善するパッチ(以下"改善パッチ"と表記)が取り込まれました。改善パッチによって、これまではバリデーションにひっかからなかった不正な正規表現文字列が"正しく"不正なものと認識されて例外が発生するようになりました。 これだけ聞けばいいことだけのように思えるかもしれませんが、実はそうでもなかったりします。経験豊富なかたであれば見た瞬間ゾッとしたかもしれません。記事では、この一見問題なさそうな改善パッチによって発生しうる問題、および、その具体的例について紹介するとともに、この手のパッチを当てるかどうかは難しい判断になるという知見を共有します。 結論 改善パッチによって発生する問題 発生条件 gcc v12.1以降、あるいは改善パッチをバックポートされた任意のバージョンを使ってC++

    「バグを意図的にバグのまま残す」という選択肢がある
    mohno
    mohno 2022/07/31
    要約すると「バグ仕様」/かつてInternet Explorerで規格に合わせろと言われても合わせなかった理由。/Windowsは旧バージョンとの互換モードが山ほどある。
  • Can one set std=c99 in GCC as a default?

    mohno
    mohno 2021/02/26
    gccがデフォルトでC99でコンパイルできるようにするのって、こんなに面倒なのかと。
  • ゲーム開発者のための C++11~C++20, 将来の C++ の展望 - CEDEC2020 - Speaker Deck

    ゲーム開発者のための C++11~C++20, 将来の C++ の展望 【CEDEC ページ】https://cedec.cesa.or.jp/2020/session/detail/s5e8327a52702c 【解説付きの書籍版 📚】https://zenn.dev/tetsurom/books/cpp11-cpp20-for-game-developers

    ゲーム開発者のための C++11~C++20, 将来の C++ の展望 - CEDEC2020 - Speaker Deck
    mohno
    mohno 2020/09/03
    ゲーム開発では新しい規格が活用されているのか。「初期化付き条件分岐」とか「三方比較演算子」とか未知の世界すぎる。VC++サポートしてないじゃん、と思ったらデフォルトがオフになってるだけだった。
  • C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium

    発端はuchan_nos氏によるこのツイートでした。 C言語で、当にメモリの0番地にデータを書きたいときはどうすりゃええの?— うー@技術書典8 Day1う31 BitNOS (@uchan_nos) 2020年2月12日 それに対する私のリプライ: uint8_t *p = 1; p--; *p = v;— hikalium (@hikalium) 2020年2月12日 私はこれで話が終わると思っていたのだが、どうやらそうではなかったらしく、色々な視点からの意見が加わりながら、話は混沌を極めたのでした…。 ということで、ここに私のこのツイートに対しての見解とか、わかったことをまとめておこうと思います。 私のリプライの背景について uchanさんが求める「0番地にデータを書きたい」という課題設定を、私はこのように解釈しました。 C言語において、整数0をポインタに変換すると、それはNULL

    C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium
    mohno
    mohno 2020/02/16
    そんなん規格上は未定義というだけでコードは生成するんじゃ?と思ったら、「最適化を有効にするとやはりud2」←へぇぇ。(「余計なことを」感が) ところで、Compiler Explorer すごいな。
  • 本の虫: GCCのgit移行が難航中

    GCCはgitへの移行を計画しているが、GCCの既存のsubversionレポジトリをgitレポジトリに変換する作業が難航している。 GCCの移行作業を検証しているのは他ならぬEric S. Raymond(ESR)だ。 ESRお手製の変換ツール、reposurgeonはsubversionからgitへの変換ができる。 Resource page for reposurgeon 3.44 しかしGCCは30年もの歴史を持ち、そのsubversionレポジトリも複雑だ。 ESRはGCCのためにreposurgeonのバグを潰し、勢い変換しようと試みたが、意外な障害に出くわした。メモリ不足だ。 GCC's Conversion To Git Is Being Held Up By RAM, a.k.a. Crazy DDR4 Prices - Phoronix ESRの所有する64GBのメモリ

    mohno
    mohno 2018/07/31
    何が大変なのかと思ったら履歴ごと移行しようとしてるのか→「ESRお手製の変換ツール、reposurgeonはsubversionからgitへの変換ができる」「今のソースツリーの状態をそのままgitにしていちからはじめるほうがマシかもしれん」
  • MicrosoftからC99開発者へ: ISO C++を使え

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    MicrosoftからC99開発者へ: ISO C++を使え
    mohno
    mohno 2018/03/10
    「C90または、ISO C++のどちらの一部でもないISO Cの機能をサポートする予定はない」「MSがCに対してリソースを無駄にしないことには賛成だ」
  • 例え話をしないC言語のポインタの説明 | 右や左の旦那様

    まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。 それでもなお「ポインタがわかりづらい」という人が後を絶ちません。 もういっそのこと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。 Hello, Worldより簡単に サンプルコード 以下のコードを考えます。 void main() { int a; int b; int c; a = 1; b = 2; c = a + b; } 「#include <stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。 まぁ見ての通り、どこにも何も出力されませんが。 このプログラムは、「c = a + b」

    例え話をしないC言語のポインタの説明 | 右や左の旦那様
    mohno
    mohno 2018/02/01
    「1と3で同じ”*”という記号を使っているくせにイミが違うのは少しヒドい」w gcc/gdb ってのが微妙にハードルが低くないが、次は配列だ! アセンブリ言語からはじめると分かるんだけどねー。そのハードルが高いけど。
  • サイン、コサインをインテルの CPU で計算すると少しバグっているらしい

    こんにちは。 ちょっと前にどこかの偉い人が「女性にサイン、コサイン教えても仕方ない」ような発言をして炎上したのは記憶に新しいところです。面白いですね。 「女の子にサインコサイン教えて何になる」 鹿児島県知事の発言がネットで非難 発言撤回の会見動画も公開 – ねとらぼ http://nlab.itmedia.co.jp/nl/articles/1508/28/news145.html 「いやいやサイン、コサイン使うでしょ」という反論には完全に同意です。それはよいのですが、プログラマー的な視点で見れば「サイン、コサインはコンピュータでどうやって求めているか」を説明できてやっと安心(?)ではないでしょうか。 そこでちょっと復習と思って調べてみたら、なんかインテルのCPUのバグ?の話とか出てきてわけが分からなくなってきたので、まとめておきました。 sin(x) の求め方(基) 理系の方は学校で習

    サイン、コサインをインテルの CPU で計算すると少しバグっているらしい
    mohno
    mohno 2017/06/05
    Pentiumバグじゃなくて:-O 多項式で計算してるのに速い(くらいCPUの処理って遅い)んだ。
  • gccの正規表現がバグだらけという話 - Qiita

    !!!??? どうなってるの??? これ、"_" の場所を変えたりしたらマッチするようになるんですよ。 なぜか? わからない。わかりたくもない。 こんなファッキンなバグが、gcc 4.9.2 まで残ってるんですよ。 4.9.3 では直っていました。 その2 今度は、これをgcc 4.9.2 で実行してみましょう。 文字クラスにマッチさせるだけの簡単な正規表現です。 string s("~"); smatch m; regex re(R"([~\-_])"); if (regex_search(s, m, re)) { cout << m[0] << endl; } else { cout << "Not matched" << endl; }

    gccの正規表現がバグだらけという話 - Qiita
  • 1