タグ

Cに関するpoginのブックマーク (30)

  • 【C言語】アライメントについて【便利なマクロあり!】 - FromNandの日記

    アライメントの勉強をしていて、気になったので実験してみた。 この記事の内容は、下の記事からほとんど抜粋してまとめたもの。めちゃくちゃいい記事だった。 でも、写しているので(僕が)カッコ悪い。 データ型のアラインメントとは何か,なぜ必要なのか? まず、アライメントとはCPUのメモリにおける制約である。 アライメントに従わないデータにCPUがアクセスする際には、幾分かのオーバーヘッドが発生する。 アライメントを跨ぐデータを読む際には二度メモリにアクセスせねばならんし、読む際なんかは四度もアクセスしないといけない。(かもしれない。) アライメントを揃えなかったことによって、キャッシュラインをまたいだりしたら大変。 キャッシュ全体(通常、32~256byteらしい)をキャッシュメモリに読み込むという大きなオーバーヘッドが発生する。 また、アライメントに寛容なCPUとそうでないCPUが存在する。 x

    【C言語】アライメントについて【便利なマクロあり!】 - FromNandの日記
  • configureファイルの書き方 - ごろねこ日記

    C言語のプロジェクトでautoconfやらautomakeやら使ってconfigureスクリプトつくる手順を勉強したのでメモっときます。 なお、MacOSX "Mountain Lion"では、たとえXcodeを入れてあっても下記で使用するautoconfやautomakeがないようです。以下のサイトに従ってこれらをインストールする必要があります。 Autoconf and Automake on Mac OS X Mountain Lion MacOSX Mountain Lion での下準備 一応説明抜きで実行する内容を抜粋して記録 MacOSX Mountain Linon用。Linux等の場合はそれぞれのパッケージ管理ツールから入れるのがよいと思います。 $ curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-2.68.tar.g

    configureファイルの書き方 - ごろねこ日記
  • Bjarne Stroustrup's Plan for Bringing Safety to C++

    Join our community of software engineering leaders and aspirational developers. Always stay in-the-know by getting the most important news and exclusive content delivered fresh to your inbox to learn more about at-scale software development.

    Bjarne Stroustrup's Plan for Bringing Safety to C++
  • C言語の「fflush関数」を解説!知っておくとデバッグにも役立つよ!

    プログラム作るだけなら使わなくてもいいからね だけど、デバッグの時なんかはこの fflush 関数が活躍することあるよ

    C言語の「fflush関数」を解説!知っておくとデバッグにも役立つよ!
    pogin
    pogin 2023/02/25
  • Rust + LLVMでプログラミング言語を自作してセルフホスティングした話

    llrlは自作のプログラミング言語です。大きな特徴が2つあります。 Hindley-Milnerベースの型推論による静的型付け (+型クラス) Lisp-likeなS式によるシンタックスとLLVM JITによるマクロ この言語の処理系をRustとLLVMを用いて実装し、それをllrl上に移植してセルフホスティングを試みました。無事セルフホスティングを達成したので、取り組んだことやモチベーションなどを順に振り返りたいと思います。 LLVMについては、フロントエンド側・バックエンド側ともに既にいくらかの解説記事が見られるため、概要は省略します。今回は新たなプログラミング言語のバックエンドとしてLLVMを用いるので、LLVMのフロントエンド側の実装がメインとなります。 事の発端: LLVM Kaleidoscopeチュートリアル Kaleidoscopeは、LLVMのチュートリアルにおいて実装す

    Rust + LLVMでプログラミング言語を自作してセルフホスティングした話
  • JISX3010:2003 プログラム言語C

    X 3010:2003 (ISO/IEC 9899:1999) (1) 2019年7月1日の法改正により名称が変わりました。まえがきを除き,規格中の「日工業規格」を「日産業規格」に読み替えてください。 まえがき この規格は,工業標準化法第14条によって準用する第12条第1項の規定に基づき,社団法人情報処理 学会情報規格調査会(IPSJ)/財団法人日規格協会(JSA)から,工業標準原案を具して日工業規格を改正 すべきとの申出があり,日工業標準調査会の審議を経て,経済産業大臣が改正した日工業規格である。 これによって,JIS X 3010:1996は改正され,この規格に置き換えられる。 改正に当たっては,日工業規格と国際規格との対比,国際規格に一致した日工業規格の作成及び日 工業規格を基礎にした国際規格原案の提案を容易にするために,ISO/IEC 9899:1999,Pro

    JISX3010:2003 プログラム言語C
    pogin
    pogin 2021/05/15
  • リンカ

    ついに、リンカの説明をするときが来た。 ここに至るまでに、何度「リンカのところで説明する」と書いただろうか? ここまで読んできた人ならば、 リンカというものが、なにやら色々やっているんだな、というのはわかってきたのではないかと思う。 筆者が常々思っていることのひとつに、「C言語に関する書籍は、リンカの説明をおざなりにしすぎだ」というのがある。 多くのC言語の書籍は、 コンパイラがソースコードをアセンブリコードに変換します アセンブラがアセンブリコードを機械語に変換します リンカが機械語をリンクして実行ファイルが作られます と、いう解説がなされがちである。この説明を見たら、多くの人が、「え、リンクってなんですか?」と、思うに違いない。 アセンブラには、「人間が読めるニーモニックを、機械が読める機械語に変換する」みたいな、最低限の説明が付くものの、 リンカの説明は「リンクをします」のひとことだ

  • C99の仕様

    長い歴史を持ちながら、依然として人気の高いC言語。その最新仕様の情報にキャッチアップするための連載スタート。今回は1999年に策定された「C99」を取り上げる。 連載 INDEX 次回 → C言語(以降、単にC)はDennis Ritchieによって1969~1973年の間にベル研にて開発されたプログラミング言語である。長い歴史を持つと共に非常にポピュラーな言語で、プログラマーでCを知らない人はまずいないと言っていいだろう。プログラミング言語のシェアを調査しているTIOBEでも、ここ最近は常に1、2位を占めている。 Cの言語仕様は今から25年近く前である1989年に初めて規格化され、これは一般に「ANSI-C」と呼ばれている。ANSI-Cは長らくCの言語仕様のスタンダードの位置を占め、世の中の大半のプログラマーは、このANSI-Cに慣れ親しんでいることだろう。しかし、実はCの言語仕様はその

    C99の仕様
    pogin
    pogin 2021/01/07
  • 回収できなかった案件の恐怖 - Qiita

    回収できなかった案件についてお話しよう はじめに 今からx年前の事。某技術者が多く集まるSlackにて C++でWebクローリング出来る人はいないか? とのことで、以前より Boost.Asioの記事をかいてる私に話がきた まず案件をくれた人について、はじめての取引なので周辺の人に話をきいたが 少し甘いという意見はあるが、誠実で良い人という意見だったので請けた プロジェクト開始 案件を紹介してくれた人の友だちよりメッセージがきてChatworkに入った 具体的な案件に関しては担当の技術者と話をしてほしいとのことで 金額は時給1万円で月末精算、働いた時間を申請してほしいと言われた 案件内容 作業者と話をした 今までC言語でWebのクローラーを作っていたが、C言語だとOpenSSLがメモリリークしていてすぐ落ちる だからC++でクローリング部分だけ作って欲しい。内部はC言語のシステムがあると

    回収できなかった案件の恐怖 - Qiita
  • 論文|MESH: Compacting Memory Management for C/C++ Applications (PLDI 2019)

    「MESH: Compacting Memory Management for C/C++ Applications」という論文を読んだのでその紹介です。arXiv.org で公開されています。PLDI 2019 で採択されている論文のドラフトだそうです。私は v2 を読みました。ソースコードが GitHub (plasma-umass/Mesh) で公開されています。 免責 読み間違えている可能性があります。正確な情報が欲しい方は必ず論文を読んでください。誤りの指摘や補足、議論などは GitHub Issue や Twitter へお願いします。 読んだ動機 C/C++ でリロケーションせずにコンパクションを行う手法に興味があった。 Speedmetor 2.0 benchmark を走らせた Firefox でメモリ消費量が減ったと報告されており、ブラウザ開発者として気になった。 Ch

    論文|MESH: Compacting Memory Management for C/C++ Applications (PLDI 2019)
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • jpcert securecoding

    プログラム開発業務に携わる全ての方々に向けて、脆弱性のない、安全なソフトウエア開発のためのセミナー、コーディングのルールやそのマテリアル、書籍に関する情報を紹介しています。 セミナー Android セキュアコーディングセミナー資料(英語版) Java セキュアコーディングセミナー資料 C/C++ セキュアコーディングセミナー資料 セキュアコーディングスタンダード CERT C セキュアコーディングスタンダード Java セキュアコーディングスタンダード CERT/Oracle 版 書籍 C/C++ セキュアコーディング C/C++ セキュアコーディング 第2版 CERT Cセキュアコーディングスタンダード Java セキュアコーディングスタンダード CERT/Oracle版 セキュアなソフトウエア開発を支援する資料 クロスサイトリクエストフォージェリ(CSRF)とその対策 Java アプ

    jpcert securecoding
  • レジストリを汚さないためのツールを作りました

    どういうツール 簡易的な仮想環境を作り、アプリケーションの動作を現在の環境から切り離すサンドボックスツールです。 レジストリとCドライブへのアクセスを仮想化することによって、 アプリケーションからシステム環境に影響を与えない様にする アプリケーションを単独で持ち運び可能にする などなどが可能になります。このツール自体はもちろんレジストリを汚しません。 どうやって DLLインジェクションからのIAT書き換えによるWin32 APIのフックにより動作を書き換えています。 IATを経由しない動的呼び出しもLoadLibraryやGetProcAddressを書き換えることで対処しています。 あくまで公開API(※)に渡す値を書き換えているだけで、質的にディスクアクセスに干渉しているわけではない、 例えばWindows APIが内部で呼び出す様なより低レベルな処理を直接呼ばれた場合などは対処出来

    レジストリを汚さないためのツールを作りました
  • Verifiable C

    Verifiable C is a program logic for the C programming language: foundational higher-order impredicative concurrent separation logic, proved sound with respect to the operational semantics of CompCert C

  • Rapid prototyping C applications with Rust

    Cargo is a gorgeous tool when it comes to building, packaging and shipping your own Rust applications. Some of you guys are living in a C/C++ world where developing Rust applications is just a hobby. A reason could be that Rust is currently not that highly accepted in the world of applications in production. This is sad, but even within your day to day development it could be possible to use Rust

    pogin
    pogin 2018/08/09
  • 構造体ぐぐるのめんどくさいねw っていうプログラム。 - ひたむきに生きたい。

    Linuxネットワークプログラミングバイブル 作者: 小俣光之,種田元樹出版社/メーカー: 秀和システム発売日: 2011/01メディア: 単行購入: 1人 クリック: 24回この商品を含むブログ (10件) を見る ゆういちろうとこのを読んでいるとき、 struct addrinfo *res0; ... getnameinfo(res0->ai_addr,res0->ai_addrlen,.... 「getnameinfoってなんだっけなー。manでも見ようー」 int getnameinfo(const struct sockaddr *sa, socklen_t salen,.... 「あ? 第一引数の saはポインタを必要としてて、第二引数は普通のsocklen_t... やのに、なんで『res0->』っていう形は一緒なんじゃよ!」 という感じで、ゆういちろうとブチギレてると

    構造体ぐぐるのめんどくさいねw っていうプログラム。 - ひたむきに生きたい。
  • Cello • High Level C

    #include "Cello.h" int main(int argc, char** argv) { /* Stack objects are created using "$" */ var i0 = $(Int, 5); var i1 = $(Int, 3); var i2 = $(Int, 4); /* Heap objects are created using "new" */ var items = new(Array, Int, i0, i1, i2); /* Collections can be looped over */ foreach (item in items) { print("Object %$ is of type %$\n", item, type_of(item)); } /* Heap objects destructed via Garbage

  • C/C++開発環境 - Qiita

    Windows/Linuxで両方で動作する成果物を想定。 有償のツールは理解が得られる方が稀なので除外。 仕様書 外部仕様 Word/Excelが手軽だけど差分が追いにくい。 Markdown+PandocかSphinxでPDF提出がいいかな? Pandoc - About pandoc Sphinx-Users.jp :: ドキュメンテーションツール スフィンクス Sphinx-users.jp 内部仕様 きちんと書いてあればDoxygenで十分だと思う。 Cしか対応していないみたいだけどdocuriumの方がgitとの親和性が高くて(tag付された結果をまとめて解析してくれるみたい)出力結果も今風にできてる。 Doxygen github/docurium インセプションデッキ 作っておくと上司/部下/協力メンバで方針を合わせやすい。 ネスケラボ » インセプションデッキ ソースコード

    C/C++開発環境 - Qiita
  • C code - 20 lines - codepad

    pogin
    pogin 2012/12/03