タグ

c++に関するreboot_inのブックマーク (21)

  • Using WebAssembly threads from C, C++ and Rust

    Learn how to bring multithreaded applications written in other languages to WebAssembly. WebAssembly threads support is one of the most important performance additions to WebAssembly. It allows you to either run parts of your code in parallel on separate cores, or the same code over independent parts of the input data, scaling it to as many cores as the user has and significantly reducing the over

    Using WebAssembly threads from C, C++ and Rust
  • How to Reduce Your SQLite Database File Size Using Qt - Amin

    reboot_in
    reboot_in 2023/07/04
    “But the obvious downside is the fact that the free space is not released. To release the space occupied by deleted files you need to do the following:” "VACUUM"
  • PartitionAlloc Design

    This document explains a high-level design of PartitionAlloc. If you're interested in its in-depth implementation, see comments in PartitionAlloc.h. OverviewPartitionAlloc is a memory allocator optimized for performance and security in Blink. All objects in Blink are expected to be allocated with PartitionAlloc or Oilpan (but not yet done). Partitions and bucketsPartitionAlloc has four partitions.

    reboot_in
    reboot_in 2022/04/30
    “PartitionAllocは、Blinkのパフォーマンスとセキュリティのために最適化されたメモリアロケータです。Blink内のすべてのオブジェクトは、PartitionAllocまたはOilpanで割り当てられることが期待されています(ただし、まだ完了し
  • C/C++の静的解析ツール・事例まとめ - 簡潔なQ

    C/C++の静的解析は、どう考えても大変なんだけどどう考えても需要が高いので、やはり色々なソフトウェアや事例があるようだ。まとまった情報が欲しいけど見つからなかったので自分の調べた範囲でまとめることにした。 他にも耳寄りな情報があったら教えてほしい。 静的解析を行うことができるソフトウェア 調べてみると結構たくさんある。それぞれの特徴とかあまりよくわからない。 (個人的には、とりわけ網羅的な形式的検証ができるツールの性能に興味があるので、それを中心に集めていたが、やはり網羅的とは限らないで探すともっとたくさん見つかるようだ。もちろん網羅性にはトレードオフがある) Frama-C …… C言語に形式手法を適用するための汎用のフレームワークで、静的検証のためのプラグインも多数(WPとかValueとか)存在する。網羅的な検証から発見的な手法、動的な手法まで様々ある。研究で使うのに便利そう Ast

    C/C++の静的解析ツール・事例まとめ - 簡潔なQ
  • Ray Tracing in One Weekend

  • C++のマングルとextern "C" { - wagavulin's blog

    C++とCが混在したプログラムを書くとときどき定義したはずの関数がundefinedだと言われることがある。そんなときの対処法とマングルの話。 その前にまずはC言語だけの場合を考える。例えば以下のようなCのプログラムを書いてみる。 /* main.c */ #include "foo.h" int main(){ func1(); return 0; } /* foo.h */ #ifndef FOO_H void func1(); #endif /* foo.c */ #include "foo.h" #include <stdio.h> void func1(){ puts("ok"); } 見てのとおり、main.cはfunc1関数を呼び出しており、foo.cはfunc1関数を定義している。当然、main.cをコンパイルしてできたmain.oもfunc1を参照し、foo.cをコンパイ

    C++のマングルとextern "C" { - wagavulin's blog
  • C言語のインクルードガードはpragma onceを使う - C言語入門

    インクルードガードとは、ソースコードのinclude処理が重複して発生することを防ぐためのものです。C言語では、define/ifndefのプリプロセッサディレクティブを利用して、インクルードガードを実現していました。処理系の拡張により pragma once が追加されました。 読み方 pragma once ぷらぐま わんす インクルードガード いんくるーどがーど include guard いんくるーどがーど 概要 C言語のプリプロセッサ(cpp) は、プリプロッサディレクティブ の include が出現するたびに、ヘッダファイル(.h)を展開しようとします。 インクルードガードは、ヘッダファイルの相互インクルードで無限ループに陥ることを防ぐことができます。ただし、defineの重複を排除することができないため、思わぬ副作用を産んでしまうこともありました。 何度もインクルードするこ

    reboot_in
    reboot_in 2020/10/30
    “インクルードガードとは、includeディレクティブによる相互インクルードの無限ループを防ぐために利用されます。 C言語では、インクルードガードは pragma once を利用します。”
  • 【C++】C++で作成したDLLをC++で呼ぶ(静的) - Qiita

    ※1 関数のプロトタイプ宣言とLIBファイルの指定(コンパイラオプションでの指定または#pragma)のみで通常の関数の様に使える。 ※2 LIBファイル・ヘッダーファイルのないDLLに使用できる。 DLL側(C++) 以前の記事で書いたものと同じのを使う。 呼びだす側(C++) .libファイルの参照設定 まず、Dllと対になる.libファイルを参照するように設定追加する。 pjのプロパティ > リンカー > 入力 の、追加の依存ファイルに、必要な.lib(ここではDllTest.lib)を追加 pjのプロパティ > リンカー > 全般 の、追加のライブラリディレクトリに、その.libのあるフォルダを追加 ※libの設定は、コード中に#pragmaでも実施できる様子。(今回は試さず) 下記を参照。 http://yamatyuu.net/computer/program/sdk/base

    【C++】C++で作成したDLLをC++で呼ぶ(静的) - Qiita
    reboot_in
    reboot_in 2020/10/21
    “※libの設定は、コード中に#pragmaでも実施できる様子。(今回は試さず)”
  • [VC++] リンクするライブラリファイルをソースコード内に記述する | あみだがみねのもろもろ備忘録

    // sample.cpp #include <windows.h> int main() { MessageBox(0, "サンプル", "", MB_OK); return 0; } 上記のファイルをcl.exeを使ってビルドするには、コマンドラインから… cl smaple.cpp user32.lib と、いう風に、MessageBox APIが格納されているライブラリ(user32.lib)をリンカに教えてやる必要がある。 このライブラリの指定を、ソースコード内に書くことができる。 #pragma comment(lib, "ライブラリ名") としてやれば良い。 つまり… // sample.cpp #pragma comment(lib, "user32.lib") #include <windows.h> int main() { MessageBox(0, "サンプル",

    reboot_in
    reboot_in 2020/10/21
    “MessageBox APIが格納されているライブラリ(user32.lib)をリンカに教えてやる必要がある。 このライブラリの指定を、ソースコード内に書くことができる。 #pragma comment(lib, "ライブラリ名") としてやれば良い。”
  • How to use `/DELAYLOAD` on a DLL from another DLL

    reboot_in
    reboot_in 2020/10/21
    “DLLの最初の関数が呼び出されるとすぐに、アプリケーションがクラッシュします。 GetLastError()126が生成されます。これは、ターゲットDLLがどの検索パスでも見つからなかったことを意味しているようです。”
  • ダイナミック リンク ライブラリ(DLL)の基礎知識

    1. DLLの作り方(VC++編) 関数subをDLLにしたい場合,次のようにソースプログラムを作成する. 外部プログラムから呼び出したい関数(この場合sub)の前に __declspec(dllexport)という おまじないをつけておく(このおまじないがついていない関数はDLL外部からは見えないので安心). #include <stdio.h> __declspec(dllexport) int sub(int arg) { printf("sub %d\n", arg); return arg + 1; } sub.c 通常の静的にリンクして利用する関数を作る場合(*.objまたは静的リンク ライブラリ*.libを作ってリンクする場合)との違いは, DLLの外に公開したい関数の定義の前に__declspec(dllexport)というキーワードがつけることだけになっている. [さらに

    reboot_in
    reboot_in 2020/10/21
    “DLLの使い方:明示的リンクによる方法 明示的リンクでDLLを利用するプログラムは, LoadLibrary,GetProcAddress,FreeLibrary の3手からなる.”
  • C++ のシンボルをデマングルする - bkブログ

    C++ のシンボルをデマングルする C++ コンパイラはシンボルが一意の名前を持つように名前マングル (name mangling) と呼ばれる処理を行います。記事では GNU の開発環境で C++ のシンボルをデマングル (demangle) する方法を紹介します。 マングルの方法はコンパイラ依存です。同じコンパイラでもバージョンによってマングルの方法が異なることがあります。たとえば GCC 3.x では int foo(int) を _Z3fooi に、 int foo(const char*) を _Z3fooPKc のようにマングルしますが、 GCC 2.95 ではそれぞれ foo__FPCc, foo__Fi となります。 コマンドラインからデマングル C++ のオブジェクトファイルに nm をかけると、デフォルトではマングルされた読みづらい形式でシンボルが出力されます。 %

    reboot_in
    reboot_in 2020/10/15
    “C++ コンパイラはシンボルが一意の名前を持つように名前マングル (name mangling) と呼ばれる処理を行います。”
  • よくみる extern "C" {} と __cplusplus - はこべにっき ♨

    C向けのライブラリのコードをながめていたらちょくちょく以下のようなコードをみる. #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Cのコードがたくさん */ #ifdef __cplusplus } #endif /* __cplusplus */ なんだろうと思って調べてみたら. __cplusplus g++でコンパイルされるとdefineされるマクロ extern "C" { /* Cのコード */ } ブレースでかこまれた範囲で,リンカでの識別子の扱い方がCスタイルになる らしい."この範囲のコードはCで書かれてるから,g++でコンパイルするときはCだとおもってよろしくしてあげてね"ってことみたい. Cで書かれたライブラリはCで使われることもC++で使われることもあるから,こういうコードでうまくその差を吸収して

    よくみる extern "C" {} と __cplusplus - はこべにっき ♨
  • C++/CLI - Wikipedia

    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "C++/CLI" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2024年2月) C++/CLIは、.NET Frameworkの共通言語基盤 (CLI) 上で実行するプログラムを作るためにC++を拡張したプログラミング言語である。前身であるC++マネージ拡張に比べて単純でわかりやすい構文になり、可読性も向上している。 C++/CLIはEcma Internationalで標準化されている[1]。C++/CLIに対応したコンパイラとしてVisual C++ 2005以降がある。ほかにもClang上で実装する試みも存在する[2]。 構文の変

    reboot_in
    reboot_in 2020/10/07
    “C++/CLIは、.NET Frameworkの共通言語基盤 (CLI) 上で実行するプログラムを作るためにC++を拡張したプログラミング言語である。前身であるC++マネージ拡張に比べて単純でわかりやすい構文になり、可読性も向上している。”
  • C++ equivalent of instanceof

    reboot_in
    reboot_in 2020/10/07
    “C ++ 11では、is_base_of <Base、T>という1つのアイテムを見つけることができます。これにより、指定されたクラスが指定されたオブジェクトのベースであるかどうかがチェックされます。”
  • C++11で正規表現(std::regex)を使う - Qiita

    (例)「int」「double」「char[20]」などの文字列に対して、 (int)、(double)、(char)[(20)]のように、型名と配列数をサブグループとして取り出す正規表現 ややこしいのは"\\["、"\\d+"、"\\]"の部分。 C/C++の文字列でバックスラッシュ一文字を表現すると"\\"になり、 正規表現のメタ文字である'['をエスケープするためにこれを前に付けて "\\["となっている。その他も同様。 C++11で追加された生文字列リテラル「R"(〜)"」を使うと次のようにも書ける。 https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#raw.string.literal #include <regex> #include <iostream> using std::string;

    C++11で正規表現(std::regex)を使う - Qiita
    reboot_in
    reboot_in 2020/09/29
    “ R"((int|double|char)(\[(\d+)\])?)"”
  • How to build a full path string (safely) from separate strings?

    Does C++ have any equivalent to python's function os.path.join? Basically, I'm looking for something that combines two (or more) parts of a file path so that you don't have to worry about making sure the two parts fit together perfectly. If it's in Qt, that would be cool too. Basically I spent an hour debugging some code and at least part of it was because root + filename had to be root/ + filenam

    How to build a full path string (safely) from separate strings?
    reboot_in
    reboot_in 2020/08/27
    “QString path = QDir(dirPath).filePath(fileName);” filePathって名前なのにdirectory名も結合できた。os.path.join()代わりで行ける
  • std::mapまとめ - Qiita

    まえがき この記事はstd::mapについての殴り書き. この記事をりーまに捧ぐ. 最初に言っておくことが一つだけある. サンプルコードは以下のC++17の機能を使い放題している. C++17 If statement with initializer C++17 Structured binding declarations std::mapとはC++標準ライブラリに用意された平衡二分木. 特徴は要素の要素数に対する対数オーダーでの高速な検索能力と 内部で要素がソート状態で保持されるというところだろう. こと特徴から使い方としては辞書みたいな使い方が多いと思われる. 高速な要素検索のみが必要でソートされることに関心がない場合はふつうunordered_mapを使い, mapを使わない. 例として, 社員の名前から時給を検索できるようなコードをあげよう. まずmapを宣言する. 次に社員名

    std::mapまとめ - Qiita
    reboot_in
    reboot_in 2020/08/18
    “std::pair<int,int> p = std::make_pair(1,2);”
  • [OpenCV][Mat]画素へのアクセススピード比較 - Qiita

    はじめに OpenCVを使っていても画素を直接いじることはよくあることだと思います。 先日,友人からMat型は遅いと言われました。しかし,私はポインタでガツガツいじっており,経験的に遅くないと考えておりました。そこで,今回,様々な方法で画素へアクセスし,スピードを比較してみることに至ったのです。(それと自分へのメモ用) また,後輩からQiitaを勧められ記事をアップする練習も兼ねて書きます。 OpenCVによる画素へのアクセス OpenCV2.X系以降,Matクラスを使用して画像を扱ってい人が多いと思います。Matクラスにある画素値へ直接操作できるメソッドを使ったり,また,Iteratorを用いて操作するなど様々な方法があります。 ここでは,考えられる方法で比較しようと思います。 cv::Mat::at<>を用いる方法 座標を指定することで,その座標の画素値にアクセスできます。 例えば,カ

    [OpenCV][Mat]画素へのアクセススピード比較 - Qiita
  • OpenCV3.1+Visual Studio 2015+64bitOSで簡単にOpenCVを試す

    OpenCVも含めてライブラリを使うには、基的に ダイナミックリンクライブラリファイル(*.dll) ライブラリファイル(*.lib) ヘッダファイル(インクルードファイル)(*.h) の3点セットのファイルを使えるように設定するのですが、やり方はいくつかあるのですが、ここでは比較的簡単な方法を紹介します。 【関連記事】 ライブラリの使用方法、VisualStudioの設定方法 前提条件 Windowsの64bitOS Visual Studio 2013(VC12)もしくはVisual Studio 2015(VC14) 上記の環境であれば、あらかじめビルドされたOpenCVのライブラリファイルが配布されているので、これを使います。 上記環境でない場合、もしくは、標準に含まれていない機能を使いたい場合には、自分でOpenCVのライブラリをビルドする必要があるのですが、その方法については

    OpenCV3.1+Visual Studio 2015+64bitOSで簡単にOpenCVを試す