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
1. 概要 C++11 から導入されているスマートポインタ(unique_ptr, shared_ptrなど) のメモリ管理の仕組みについて調べたことをまとめています。スマートポインタでは、new/deleteの関係ように自分で意図的に delete をしなくても、その変数の生存範囲(スコープ)が終わったタイミングで自動で破棄されるため、動的に確保されたメモリのメモリリークを防ぐことが出来ます。 ここではスマートポインタ自体の前提知識について説明しませんが、C++11スマートポインタ入門が非常に良くまとまっているため、必要があればこれを読むことをお勧めします。 また、ソフトウェアデザイン 2021年9月号でも、C/C++のメモリ管理について概要が少しだけ説明されています。 2. 参照先が誰も居なくなった時点でメモリ解放 スマートポインタの場合、その変数を参照する人が誰も居なくなった時点で自
目次 配列外アクセスをしたときの比較表 Visual Studio 2022で範囲外アクセスを気づきやすくする方法5つ エラー一覧を「ビルド+Intellisense」にする sanitizerを積極的に使う 生配列よりstd::arrayがよい Release版でSTLの範囲チェックしたいときは、 _CONTAINER_DEBUG_LEVEL=1 にする インテリセンスが安定せず嫌な場合、clangを代わりに使うのがよい はじめに 先日、Visual Studio 2022で、配列の範囲外アクセスのデバッグでハマってしまった。 constexpr int S = 20; struct Maze { Maze() { for (int y = 0; y < S; ++y) { h[y][0] = true; h[y][S] = true; } for (int x = 0; x < S;
TypeScriptをはじめとするいくつかのプログラミング言語には、never型という型がある。この型は典型的には「制御を返さない関数」の返り値として使われる: function f(x: string): never { console.error(x); throw new Error(); } never型は型システム的には「値を持たない型」「任意の型の部分型」として特徴づけられる。 他のプログラミング言語、例えば私が作っているLunarMLにもnever型があると便利だろうか? 前提:部分型はゼロコストで変換できて欲しい これは私の意見だが、部分型から上位型へはゼロコストで変換できて欲しい。例えば Sub <: Super という関係があった時に、Sub 型の値をゼロコストで Super 型へ変換できて欲しいのはもちろん、関数型についても A -> Sub から A -> Supe
はじめに 皆さん、C言語はやってますか? 僕が通っている高専の授業ではではDebian上でC言語を用いてプログラミングを行っていますが、学校でしかできない... という人もいると思います。そこで、Linuxの環境とC言語の環境をWindowsPC上に用意する方法をまとめてみます。 この記事の対象者 C言語を自分のPCで実行できるようにしたい人 Linuxのコマンドの練習を自分のPCでやりたいが、Linuxを入れるのは難しい人 この記事をお勧めしない人 Windowsを愛し、Windowsこそがどの点においても最高だと信じてやまない人 Macユーザー(ただし仮想でWindowsを使用している場合を除く) Visual Studioを使いたい人 この記事を読むにあたって最低限必要なこと PCにWindowsが入っていること PCの管理者権限を持っていること キーボード入力ができること ネットか
C や C++ の const 修飾子は変数や引数に指定することで “値が不変である” ということを示す. 極めて単純である. これは書き方にいくつかのバリエーションが存在するが、ポインタ変数に対して指定する場合には初見だと非常に混乱する記述となる. この記事ではこの const 修飾子を混乱せずに使うための考え方についてまとめる. 変数に対して const 指定する場合 int a = 10; のように宣言された変数を const 指定する場合には、以下のいずれかの書き方がある. const int a = 10; // 変数 a の値は書き換えできなくなる. int const a = 10; // 同上 このいずれかの記述を行った場合、変数 a は値を書き換えることができなくなる. すなわち、a = 20; のような代入を行おうとするとコンパイルエラーが発生するようになる. これらは
This blog post aims to shed light on the potential risks associated with transitioning a codebase to incorporate coroutines. Continual misuse of coroutines may result in software vulnerabilities and performance degradation. Coroutines, even in the absence of multi-threading, demand a level of caution comparable to writing multi-threaded code due to their asynchronous nature. Understanding and prop
GCC Rust Approved By Steering Committee, Likely To Land For GCC 13 Written by Michael Larabel in GNU on 11 July 2022 at 12:00 PM EDT. 80 Comments The GCC Steering Committee has approved of the GCC Rust front-end providing Rust programming language support by the GNU Compiler Collection. This Rust front-end will likely be merged ahead of the GCC 13 release next year. The GCC Steering Committee this
参考資料 次期C標準 (C23) の内容が固まったらしい cppreference.com - C23 🙇 Q. これはC++の記事というよりも、Cの記事ではないですか? A. 「お前がそう思うんならそうなんだろう お前ん中ではな」 C99言語機能では_Boolキーワードとして導入され、ヘッダstdbool.hによりbool型とtrue/false定数が有効となっていた。C23以降は常にbool/true/falseとして利用可能となる。 ↩ C99言語機能では_Static_assertキーワードとして導入され、ヘッダassert.hによりstatic_assertが有効となっていた。C23以降は常にstatic_assertとして利用可能となる。またC23からC++17同様に第2引数を省略可能となる。 ↩ C99言語機能では_Thread_localキーワードとして導入され、ヘッダt
概要 C言語をコンパイルするとき、人が記述したCソースは抽象構文木と呼ばれる中間的な表現に変換され、バイナリ形式になります。 今回は、そのC言語ソースを抽象構文木として解析できるPythonプログラムを使って遊んでみました。 準備 LLVMのインストール この中の最新のバージョンを選択しましょう。 Windows版はAssetsの中に一見ないかもしれないですが、「LLVM 15.0.5」(執筆時点)でをクリックすれば、windows版のインストーラもダウンロードできます。 インストールするときに環境変数の設定をインストーラの方でやってくれるオプションを選択すれば楽です。 Python用のパッケージをインストール パッケージをインストールしたい環境を開き、以下コマンドを実行します。 import sys from clang.cindex import Index def visit_nod
以前の記事(行列乗算の最適化入門(コンシューマー向けGPU編) - よーる)で、RTX 4090向けの単精度行列積コードを作成し、cuBLASの98.4%である58.3 TFLOPSの性能を達成しました。 そのコードを更に最適化した結果、cuBLASを超える60.0 TFLOPSの性能を出せる単精度行列積コードを作れたので、その改良を紹介します。 実験条件等は前回の記事に準じます。 グローバルメモリからの読み出しをソフトウェアパイプライン化 以前の記事で紹介したコードは、以下のような構造でした。 for( int k0 = 0; k0 < N; k0 += SharedMemBlockK ) { __syncthreads(); グローバルメモリからシェアードメモリへの転送 __syncthreads(); シェアードメモリからレジスタへの転送と、レジスタ上での行列積計算 } この方式は、
この記事は C++ Advent Calendar 2021の5日目の記事です。 2021年ももうすぐ終わりそうですが、みなさんはC++20を使っているでしょうか? C++20では、符号付き整数型のビット表現が二の補数であると規定されました。 また、ビット表現を保ったまま別の型に変換する関数であるstd::bit_castが標準ライブラリに実装されました。 これら二つの機能追加により、値のビット表現に依存したプログラムを書くことが非常に容易になりました。 この記事では、なぜstd::bit_castを使わなければならないかを説明します。 もちろん、それ以外の時にstd::bit_castを使うべきではないということではありません。 ビット表現を保ったまま別の型に変換したい時にはいつでもstd::bit_castを使う、という方針もありでしょう。 std::bit_castを使わなければなら
With P2900, we propose to add contract assertions to the C++ language. This proposal is in the final stages of wording review before being included in the draft Standard for C++26. It has been suggested by some members of the C++ standard committee that this feature is too large, too complicated, and hard to teach. As it turns out, the opposite is true: contract assertions are actually very simple
【2021/10/27追記】本記事のテーマについては,次のpaizaのページが参考となるかもしれません.値取得・出力サンプルコード:https://paiza.jp/guide/samplecode いやもう,FizzBuzz問題の代わりに『コードが書けないプログラマ志願者を見分ける手法』にしてもいいほどに(それは言い過ぎ). 以前,『サンプルコードは入力と出力をセットにして作成してから実行を確かめる』といったことを述べている記事を書き,また,その趣旨に基づく『最初のサンプルプログラム』集みたいな記事も作成しました.これらを踏まえ,AtCoderあたりでは定番の,値入力部分のサンプルプログラムをいろんな言語で書き始めてみたのですが…いやあ,めんどくさい.入力スタイルに合わせるのはもちろん,言語固有の工夫が必要だったり,入力後の処理によってケースバイケースとなったり."Hello, Worl
Qt is a popular cross-platform framework for application development and user interface design. Its various libraries and toolsets can be used to create, test, and deploy applications that target multiple platforms and operating systems including Linux, Windows, macOS and embedded/microcontroller systems. Qt recently released a new version of the Qt Visual Studio Tools extension that integrates wi
GCC Rust Front-End v4 Posted - Now Cleared For Merging In GCC 13 Written by Michael Larabel in Programming on 6 December 2022 at 06:50 AM EST. 53 Comments The GCC Rust front-end that provides very preliminary support for the Rust programming language atop the GNU Compiler Collection is now cleared for merging to the mainline codebase! Earlier this year the GCC steering committee approved Rust whil
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く