タグ

c++に関するmatsukazのブックマーク (22)

  • 論文|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)
    matsukaz
    matsukaz 2019/02/26
  • cpp-intro/ at master · EzoeRyou/cpp-intro · GitHub

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    cpp-intro/ at master · EzoeRyou/cpp-intro · GitHub
    matsukaz
    matsukaz 2018/12/01
  • LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ

    コンパイラを作ってみたいと思っていても、アセンブリ言語はよくわからない。 パーサーみたいなコードは書いたことがあるけれど、コード生成の処理はさっぱりだ。 実行ファイルをバイナリエディターで見るとかなにそれ怖い。 そんな私なのですが、LLVMに興味を持ち始めています。 SwiftRust、あるいはEmscriptenなど、近年注目されている言語やコンパイラ技術の中枢にはLLVMがあります。 アセンブリはよく分からなくてもLLVMを使いこなせるようになれば、マルチプラットフォームで実行ファイルを生成できる言語処理系を作るのではないか。 コンパイラ作ってみたいな、LLVMを使ってみようかなと思っている今日このごろです。 ところが、いざLLVMを勉強しようと思ってもどこから始めればいいかよく分かりませんでした。 マニュアルは巨大で読む気が起きないし、リファレンスを見てもさっぱりです。 雰囲気はわ

    LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ
  • それC++なら#defineじゃなくてもできるよ

    Ryzen 7 8700G + ECC メモリーで組んじゃったヒト 2024/02/12 DIY PC とにかく複雑な Zynq のソフトウェアを Earthly でビルドする 2022/09/19 FPGA Ultra96 で Arch Linux ARM を動かす 2020/11/29 Arch Linux ThinkPad X13 を買いました 2020/09/01 ThinkPad X13 Arch Linux Bus Blaster で Raspberry Pi Model B を JTAG デバッグしてみる 2020/07/05 Raspberry Pi Brainf**k からはじめる自作コンパイラ 2019/10/21 Rust Ultra96 で Julia set をぐりぐり動かせるやつをもう少し強くした 2019/08/29 FPGA Exit status は無視し

    それC++なら#defineじゃなくてもできるよ
    matsukaz
    matsukaz 2016/10/16
  • 高速なハッシュテーブルを設計する | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) はじめに 稿では、高速で汎用的なハッシュテーブルを作るために行う、設計についての多くの意思決定事項を紹介します。最終的に、私の emilib::HashSet とC++11の std::unordered_set の間のベンチマークが出来上がりました。もし、ハッシュテーブルに興味があって、自分で設計したいなら(どのプログラミング言語かに関わらず)、稿がヒントになるかもしれません。 ハッシュテーブル は、素晴らしい発明です。 ならし計算量O(1) ( O(√N)時間 )で、挿入、削除、検索を行うことができます。ならし計算量とは、ハッシュテーブルの計算に平均でO(1)の計算量がかかることを意味しますが、時々、これよりも多くの時間がかかる場合があります。具体的には、ハッシュテーブルに空きがない場合で、挿入の

    高速なハッシュテーブルを設計する | POSTD
  • C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 先日、社内で主にLinux上でC/C++を用いている開発者向けの講義をしました。 「こんなことができる」と知ってもらい、興味を持てば各自で勉強してもらおうと広く浅くツールを紹介しました。 gtags, ASan, Valgrind, addr2line, cppcheck, SystemTap, perfなどです。 興味があれば講義資料「C/C++プログラマのための開発ツール」をごらんください。 コンパイラオプション 受講者には新人やサイボウズ・ラボユースの学生もいたので基的なところから紹介しました。 C/C++コンパイラを使うときはできるだけ警告オプションをつけるのが望ましいです。 警告が出るのは自分のコードの書き方に不備があることが多いからです。 gccやclangでは-Wall -Wextraは基としてそれ以外にも有用なオプションがあります(C++

    C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ
    matsukaz
    matsukaz 2016/09/16
  • C++11スマートポインタ入門 - Qiita

    [2022-06-22] さすがに情報が古くなってきたため、最新の規格に合わせて記事の内容を再編集した記事を新たに書きました。よろしければ、こちらの新記事「C++20スマートポインタ入門」をご参照ください。 C++11では、unique_ptr<T> shared_ptr<T> weak_ptr<T>の3種のスマートポインタが新たに追加された。これらのスマートポインタは、いずれもメモリの動的確保の利用の際に生じる多くの危険性を低減する目的で使用されるが、それぞれ独自の考え方と機能を持っている。3種のスマートポインタを適切に使い分けることで、安全性と開発速度の向上が見込めるだけでなく、プログラマの意図に合わせて「ポインタ」を記述し分けることができる、非常に強力なツールとなる。 解説では、スマートポインタについて初めて学ぶ人を対象に、C++11で追加された3種のスマートポインタの機能と使い

    C++11スマートポインタ入門 - Qiita
    matsukaz
    matsukaz 2016/08/16
  • C++11スマートポインタで避けるべき過ち Top10 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) 私は新しいC++11のスマートポインタをとても気に入っています。自分でメモリを管理するのが嫌だと感じる多くの仲間たちにとって、これはいろいろな面で天の助けでした。私の場合、このおかげで新人にC++を教えるのがずっと楽になりました。 しかし、C++11のスマートポインタを幅広く使っていた2年ちょっとの間で、使い方を誤ると、プログラムの効率が落ちたりクラッシュして壊れたりするという事態に何度も遭遇しました。参照用に、以下に例を載せました。 まずはこれらの”過ち”を、簡単なAircraftクラスを例に取って見てみましょう。 class Aircraft { private: string m_model; public: int m_flyCount; weak_p

    C++11スマートポインタで避けるべき過ち Top10 | POSTD
    matsukaz
    matsukaz 2016/06/23
  • Google C++スタイルガイド 日本語訳

    Text Drop 翻訳、プログラミング、写真、カメラなどについて書いてます。スタイルガイド/コーディング規約やチートシートなど、ちょっと便利なものを翻訳しています。 TEXTdropでは、C++プログラマーも利用できるパワフルな機能を搭載。C++のコードを書く際に行う手順や避けておきたい工程などを詳しく説明しています。コードスタイルラインの日語版では、日語訳やJ P Yへの換金もサポート。話題性があるオンラインカジノ 日円変換や入金の際のバグにも対応しています。統一性のあるコードを書くためのポイントや規約の種類を参考にする事ができます。

    matsukaz
    matsukaz 2016/03/30
  • 2016年、C言語はどう書くべきか (前編) | POSTD

    (訳注:2016/3/2、いただいた翻訳フィードバックをもとに記事を修正いたしました。) (訳注:著者のMattより、「文中で明言はしていないが、この記事の内容はx86-64 Unix/Linux/POSIXでアプリケーションをプログラミングする場合にフォーカスしている。他のプログラミング領域では、対象とするシステムに応じた(例: 8-bitの組み込みシステム、10年前のコンパイラ、多くの異なるCPUアーキテクチャで動く必要のあるアプリケーション、Win/Linuxでのビルド互換性など)特有のアドバイスが必要」との補足を頂いております。) 以下の文章は2015年の始めに書いたドラフトで、今まで公開していませんでした。私のドラフト用フォルダの中で誰の目も引かなかったため、大部分が書いた時のままです。公開するにあたり、単純に2015年を2016年に変更しました。 必要な修正、改善、苦情があり

    2016年、C言語はどう書くべきか (前編) | POSTD
    matsukaz
    matsukaz 2016/02/19
  • C++でJavaっぽい、いやJava以上のsynchronized - Qiita

    C++11以降だとstd::mutexとstd::lock_guardがありますし、これらは簡単なクラスだから古いC++でも数秒で自作できますし、でも排他スコープが明確なJava/C#のsynchronizedの記法がうらやましいなーとこんなマクロ書いちゃうこと多いですよね。(よね?) #define synchronized(monitor) \ if (auto __lock = std::make_unique<std::lock_guard<std::mutex>>(monitor)) std::vector<int> data_; // いろんなスレッドから読み書きするデータ std::mutex monitor_; // mutexオブジェクトを宣言しておいて ... synchronized (motinor_) { // 排他制御された処理 data_.doSomethin

    C++でJavaっぽい、いやJava以上のsynchronized - Qiita
    matsukaz
    matsukaz 2015/08/23
  • 【c++】激震が走った、Pimplイディオム | 技術は熱いうちに打て!

    概要いきなりですが、 C++では、嫌でもprivateな変数や関数も.hファイルに宣言する必要がある。 と思ってませんか? この記事を読めばその常識は覆ります! 今日C++のためのAPIデザイン を読んでいて、激震が走りました。 冒頭にも書いた様に、 C++では嫌でもprivateな変数や関数も.hファイルに宣言する必要がある。 そう思っていた時期が僕にもありました。 でも、違うんです。 どうやらPimplと言うイディオムを使うとcppファイルに隠蔽出来るそうです。 Pimpl導入前のコード簡単な例で示してみましょう。 ここにHogeと言うクラスがあり、インスタンス化されたらhogeと出力されるクラスがあります。 // Hoge.h class Hoge { public: Hoge(); ~Hoge(); private: void printHoge(); }; // Hoge.cpp

    【c++】激震が走った、Pimplイディオム | 技術は熱いうちに打て!
    matsukaz
    matsukaz 2015/03/27
  • ゲーム開発者のための C++11/C++14

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami

    ゲーム開発者のための C++11/C++14
    matsukaz
    matsukaz 2015/03/16
  • Backtraces for C++ | Dariusz on Software Quality

    matsukaz
    matsukaz 2015/03/10
    print demangled stack backtrace
  • モダン C++ プログラミング - 日本語公開記事 - Confluence

    このドキュメントはサイボウズ社内のトレーニング用に作成したものです。 作成時点では C++11 はまだあまり利用できない状況でしたので、C++98 ベースの記述になっています。 いずれ更新を予定しています。 モダンの定義モダンとはテンプレートメタプログラミング(TMP)を駆使することです。嘘です。 宗教論争に意味はないので、ここでは 「最近の C++ の仕様・機能を理解し、C より実装効率が良く不具合の少ない」 プログラミング技法を「モダン C++ プログラミング」と定義します。 つまり、不具合が少なく、かつ C にはもう戻れなくなるような効率の良さを達成するものです。 学習効率(ROI)が極めて良くないような技法(例えば TMP)は、この定義では除外されます。 勉強方法お勧めの順序は以下。決して全部を読もうとしないこと。 C++ Language Tutorial のような、あっさりした

    matsukaz
    matsukaz 2015/03/04
  • ラムダ式 - C++入門

    ラムダ式 (lambda expression, 無名関数(anonymous function, nameless function)、匿名関数)とは、関数を定義するための記法、文法です。 読み方 ラムダ式 らむだしき lambda expresssion らむだ えくすぷれっしょん 無名関数 むめいかんすう anonymous function あのにます ふぁんくしょん nameless function ねいむれす ふぁんくしょん 匿名関数 とくめいかんすう 概要 ラムダ式は、無名関数 ラムダ式は、関数オブジェクトで、ラムダ式は、生成されたクラスのoperator()になります。 ラムダ式は、std::functionに代入できます。 ラムダ式は、STLの引数に使用できます。関数の引数として、ラムダ式を直接書けます。 以前は、関数をその場で定義できず、別途定義したものを利用していま

    matsukaz
    matsukaz 2015/03/04
  • static_cast をいい加減な気持ちで適当に付けないと決めた日 - zakio.net

    最近、些細なことに気付く程度には余裕が出てきたのだろう。ふと自分のコードを見直してみると、static_cast を単なる「警告除け」や「コンパイルエラー除け」として、あやふやな理解のまま使っていることに気付いた。どうやら私は、static_cast をなんとなく「それ以外の cast」といったような感覚で使っているようだ。「それ」とはもちろん、標準で用意されている static_cast 以外の cast、dynamic_cast, const_cast, reinterpret_cast の3つのこと。これらの cast は役割が結構はっきりしているので、それぞれ、安全なダウンキャスト用、const 外し用、強制置き換え用として(もちろん必要に迫られて)迷うことなく使っている。ところが static_cast だけは、それ以外の状況で警告(あるいはコンパイルエラー)が出た時に仕方なく付

    matsukaz
    matsukaz 2015/03/03
  • C++ Object Oriented

    matsukaz
    matsukaz 2015/03/03
  • C++ マルチスレッドプログラミング

    Ohotech 特盛 #10 ( http://ohotech.connpass.com/event/7517/ )で発表した資料です。Read less

    C++ マルチスレッドプログラミング
    matsukaz
    matsukaz 2015/01/11
  • C言語/C++ プログラミング 入門

    C 言語は 1972年にUSの有名なベル研究所で Dennis Ritchie らが設計・実装した言語だ。 今となっては低水準な言語だが、充分な機能、簡潔な記法とアセンブラに近いパフォーマンスを持ち、 Unix, Windows, Linux 等の OS をはじめ、コンパイラ、テキストエディタ等のツールや、ビジネスアプリやゲームなど多くの各種アプリケーション開発に用いられてきた。 C++ 言語は 1980年頃、やはりベル研究所の Bjarne Stroustrup が開発したもので、C にオブジェクト指向などの機能を追加したものだ。 C との互換性を維持しつつオブジェクト指向が可能で、パフォーマンスも高かったことから、 1990年頃から、ビジネスアプリやゲームなど多くのアプリケーション開発に使用されるようになった。 C++ は、過去の互換性を維持しつつ最先端のプログラミングパラダイムを多く

    matsukaz
    matsukaz 2014/12/09