ABC290感想(C, D)

C問題 入力を読み取るときに,setのデータ構造で読み取るようにすれば,読み込んだ段階でソートされていることになるので,これは一つテクニックとして覚えておきたい.std::setは任意の値を探したい時に,見つけたらそのインデックスを返すfindという関数を…

ABC289感想(C, D, E)

C問題 bit全探索で解く問題.2m-1の選び方がある問題だから,bit全探索で解く問題だとは思ったが,部分集合を足し合わせた集合に1~Nが全て含まれているかどうかを判別するアルゴリズムが思いつかなかった. 解答を見て納得した.std::setというライブラリを…

ABC128 (C問題) bit 全探索

探索系の問題をやりたくてこのサイトを見ていた。そしてbit全探索に馴染みがなかったので、今回はABC128のC問題に取り組んだ。 問題設定が自分にとっては複雑で、まずはこれを理解するのに時間がかかった。競プロには迅速な情報処理能力も求められていると改…

ABC281(C問題) 感想

本日はABC281のC問題について。 以下が私が最初に書いたコード。まずこれはセグフォで通らなかった。理由としては、ベクトルの要素数を定義していないのに関わらずA[i]のようにベクトル要素にアクセスしてしまっているからである。そこでstd::vector<int> A(N)の</int>…

ABC281 (A, B) 感想

お久しぶりです。ちょっと忙しくて投稿ができていませんでした。 年末ということもあって、街の空気も師走の忙しさやクリスマスに対する晴れやかな気持ち、お正月に向かう穏やかな気持ちなどが入り混じったような感じですが、自分はやっぱり卒論とプロジェク…

1週間のまとめ 2022/11/06

今週に書いた記事について振り返る。 RISC-V Vector拡張のアセンブリを読み解く 異なる型同士の演算 - takumi9のブログ リンク基本事項 - takumi9のブログ この記事で最後に静的リンクに失敗して、次の記事では静的リンクに成功している。この二つの違いとし…

ExpressのsendFile()とrender()の違い

家庭教師でExpressを用いてWebアプリ制作の指導をしているのだが、renderとredirectが出てきて、それらの違いが何かと聞かれると説明するのが難しいし、実際その二つで異なる挙動を示すので、今回まとめてみることにした。 まず以下のようなコードを想定する…

リンカ基本事項 リロケーションの導入まで

今回シンボルに関する基本事項とリロケーションの導入まで行っていく。 ローカルシンボルが外部ファイルから参照できないことを確認する。そのために以下のsym0.sとsym1.sという2つのアセンブリファイルを用意する。 _start: mov $local_symbol, %rax mov $g…

リンカ基本事項 シンボルの導入

前回リンクについて軽くまとめたが、リンクする際にはリンカが必要なわけだが、リンカはどのような処理を行っているのかをまとめてみた。 まず大きく分けてリンカが行っていることは以下の二つである。 オブジェクトファイルをまとめて一つの実行ファイルに…

スタティックリンクとダイナミックリンクによって作成される実行バイナリサイズの違い

前回スタティックリンクとダイナミックリンクの違いを述べ、それぞれの方法でリンクした時のファイルのサイズを見ようとしたが、printfのスタティックライブラリが見つからなかったので、途中で断念してしまった。そこで今回は自分で関数を作ってそれをライ…

リンク基本事項

コンパイルした後にオブジェクトファイルをリンクして実行ファイルを作成するという作業を一般にリンクと呼ぶが、そのリンクについての理解が曖昧なので今回まとめてみることにした。 まずリンクの種類として、スタティック(静的)リンクとダイナミック(動…

RISC-V Vector拡張のアセンブリを読み解く 異なる型同士の演算

以前と同様に、RVVのアセンブリを読み解いてみようと思う。今回は型の大きさが異なる同士の演算を見ていこうと思う。 C言語ソースコード // Vectorization of Mixed Types #include <stdio.h> int foo(int *A, char *B, int n) { for (int i = 0; i < n; i++) { A[i] </stdio.h>…

1週間のまとめ 2022/10/29

1回ブログに書いたことも時間が経つとすぐに忘れてしまうので、内容を振り返って、ついでに軽くまとめることにする。普通にまとめるだけだとなんだか簡単なので、英語で書くのもありだと思ったのだが、とりあえず習慣化することが優先なので日本語でまとめる…

RISC-V Vector拡張のアセンブリを読み解く

RISC-V Vector拡張(RVV)のアセンブリを読むのにまだ慣れないので、実際に出力されたコードを読んで読み解いてみようと思う。 C言語ソースコード void loops(int n, int A[], int B[]) { for (int i = 0; i < n; i++) { A[i] *= B[i]; } } int main() { int n…

fopen_s/fprintf_sなどのセキュアCライブラリ

家庭教師としてオンラインでプログラミングを教えているのだが、その際fopen_sやfprintf_sという関数が出てきて、最初はfopenやfprintfの新しいバージョン、もしくは古いバージョンの関数かなくらいに思っていたのだが、どうもMacのgccでもclangでも「定義さ…

クイックソート メモ

いつもクイックソートの書き方がわからなくなる(セグフォとかで正確に実行できない)ことが多いので、メモとしてqsortのC言語によるアルゴリズムを書いておく。今回はCの標準ライブラリであるqsort関数とどちらが実行速度が大きいかを比較した。 #include <stdio.h> </stdio.h>…

RISC-V アセンブリを読む その2 関数呼び出し

今回は引数や返り値がわかりやすい関数呼び出しが行われているアセンブリを精査していく。 関数呼び出し #include <stdio.h> int add(int a, int b) { return a + b; } int main() { int c = 1; int d = 2; int e = add(c, d); printf("%d", e); return 0; } 00000000</stdio.h>…

RISC-V アセンブリを読む その1 Hello World

前回の「RISC-V アセンブリを読む その0 - takumi9のブログ」でアセンブリを読むための環境を作ったので、これから実際に様々なRISC-Vアセンブリを読んでいこうと思う。前回の記事の通り、gccを用いてコンパイルした。 Hello, World まずは一番基本的なコー…

RISC-V アセンブリを読む その0

RISC-Vのアセンブリの個別の命令に関してはある程度理解しているのですが、高級言語で書かれたものがどのようなアセンブリに変換されるのかの理解が乏しいので、今回はC言語をRISC-V向けにコンパイルして出力されたアセンブリを眺めてみようと思う。 以下が…

TypeScript 基本型

処理の流れ 以下が大まかな処理の流れ。まず1~3はTSにおける処理。4~6はJSにおける処理。 TypeScriptソース→TypeScript AST ASTが型チェッカーによってチェックされる TypeScript AST→JavaScriptソース JavaScriptソース→JavaScript AST AST→バイトコード バ…

RVV Intrinsicsの一部紹介 その1

RISC-V "V" Vector Extension Intrinsicsについて risc-vにはベクトル拡張というものがあり、現在公式に批准されるために評価されている段階で、仕様も凍結されている。そのため、ベクトル拡張が正式にrisc-vの拡張命令として認められる日もそう遠くはないだ…

初めての投稿

自己紹介とこのブログの目的 初めまして。東京大学のとある学部/学科に所属している者です。 ブログへの初めての投稿ということで、何を書けばいいかあまりわかっていませんが、これからは自己研鑽のために毎日1時間だけ学びたい技術を学んでその内容を投稿…