コンピューター上でプログラムを動作する際に必要になるのがメモリです。プログラム自体をメモリに読み込む必要があるのはもちろん、プログラムが行う動作はほとんど「メモリから値を取りだして計算し、メモリに保存する」であるといっても過言ではありません。プログラムが動作する際にメモリがどのように管理されているのかについて、ベテランプログラマーのサム・ローズさんがブログで解説しています。 Memory Allocation https://samwho.dev/memory-allocation/ C言語の標準ライブラリには「malloc」と「free」という2つの関数が用意されています。この2つはなんと1979年のUnix v7から存在している歴史ある関数で、mallocがメモリの割り当てを担当し、freeがメモリの解放を担当しています。サム・ローズさんの解説は「この2つの関数の中身を自分で実装する」
A few months ago, I set myself the challenge of writing a C compiler in 500 lines of Python1, after writing my SDF donut post. How hard could it be? The answer was, pretty hard, even when dropping quite a few features. But it was also pretty interesting, and the result is surprisingly functional and not too hard to understand! There's too much code for me to comprehensively cover in a single blog
Sometimes, C/C++ projects have a long development cycle. When working on such a project, it can be easy to take our development environment for granted, and forget about the effort invested in its bring-up. The build environment works like magic, the test framework is neatly integrated, and the CI/CD pipeline relieves us of tedious, repetitive tasks. For me, all it took was a simple thought: How d
あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。
One thing that all programs on your computer have in common is a need for memory. Programs need to be loaded from your hard drive into memory before they can be run. While running, the majority of what programs do is load values from memory, do some computation on them, and then store the result back in memory. In this post I'm going to introduce you to the basics of memory allocation. Allocators
This article was discussed on Hacker News and on reddit. The major compilers have an enormous number of knobs. Most are highly specialized, but others are generally useful even if uncommon. For warnings, the venerable -Wall -Wextra is a good start, but circumstances improve by tweaking this warning set. This article covers high-hitting development-time options in GCC, Clang, and MSVC that ought
C10K 問題 (the C10K problem) は1999年に Dan Kegel が発表した文章、ならびにそこで提示された「問題」です。文章はその後も2000年代前半に何度か更新されているのですが、さすがに令和に読み返すと、当初の問題意識がわかりにくいところがあります。 2000年からの10年は、 ソフトウェア面では、select(2), poll(2) にかわる新しいシステムコールの実装と、それを使ったアプリケーションの普及 ハードウェア面では、x86 アーキテクチャの64ビット移行、仮想化命令の追加と、マルチコア化 さらにそこにクラウドも登場する、面白い時代でした。ここでは、それらの出来事を中心に、さらに、当時の雰囲気をつたえるような日本国内のブログやインタビュー記事をまとめることで、C10K 問題が、さまざまな側面から解決されていく流れを説明したいと思います。 書き足したいと
はじめに 最近プログラマーとしてのキャリアに一区切りつけようと思っており、これまでのプログラミングの勉強の集大成となるブログを書きたくなったので書く。初めてプログラミングをして、フロントエンド開発をして、サーバーから値が返ってきたときは「どういう仕組みで値が返ってきたんだ?」と疑問に思っていた。ずっと理解したくて理解できていなかった。だからずっと勉強していた。そして最近になってようやく自分の言葉で説明できるようになった気がしたのでブログを書きたい。 2015 年版が自分の原点であり、この記事を書くモチベーションになった このような記事は実は過去に存在している。 FYI: https://blog.yuuk.io/entry/2015-webserver-architecture その記事はサーバーがどういう仕組みで動いていて、どのように進化し、2015 年に至るかを解説してくれた記事だ。自
code golfとは † 普通のゴルフは、ボールをカップに入れるまでのストローク数をいかに少なくするかを競います。code golf(コードゴルフ)は、目的の出力をするプログラムをいかにすくないストローク数で作成するかを競います。つまり、「ソースコードが短い方が勝ち」です。 そんなの面白いのか?と思われるかもしれませんが、やってみるとなかなか奥が深く、中毒性がありますよ。 ↑ このページは? † このページでは、そんなcode golfのC言語での入門ページです。「C言語での」と書いた理由は、code golfは目的の出力が得られればよいわけですから、言語はなんでもよいのです。なので、このページでは「C言語でいかにコードを短縮するか」の入門をしていきます。 ちなみに、code golfの言語はなんでもよいと書きましたが、異なる言語間では勝負が成り立ちませんので、通常はC言語はC言語同士で
回答: GNU glibcのソースコードに、本当にクールなコードを見つけました。ヘッダファイルのstring.hにあるstrlen関数です。 もしstrlenを実装してくれと言われたら、私は多分こんな感じのコードを書くでしょう。 [code]size_t strlen (const char *str) { const char *p; if (str == NULL) return 0; p = str; while (*p != '\0') p++; return p - str; } [/code]全く悪くありません。...
プログラミングをする上で、コメントをきちんと残したり、わかりやすい変数名をつけたりして「読みやすいコード」を目指す作業は重要です。しかし、「読みやすいコード」と「優れたコード」の間には、時として構造上の大きな違いがあるのも事実。そんな「優れたコード」に対するLinuxの開発者リーナス・トーバルズ氏の考え方について、エンジニアのmkirchner氏が説明しています。 mkirchner/linked-list-good-taste: Linus Torvalds' linked list argument for good taste, explained https://github.com/mkirchner/linked-list-good-taste Linus Torvalds: The mind behind Linux | TED Talk https://www.ted.co
はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム この本には一冊の本に盛り込むにはやや欲張りな内容を詰め込みました。本書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 この本では、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを本書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう
万年エンドユーザのブログ。バイクとカヤックでうろうろしてキャンプするの…
2018/06/05 1 アルゴリズム 担当: 以前は田浦准教授と相田が隔年で担当→近年は毎年相田が担当 目的: コンピュータアルゴリズムの基礎 ≒良いプログラムを書くための先人の知恵を学ぶ 講義資料(未完) : http://www.aida.t.u-tokyo.ac.jp/~aida/algorithm.pdf 参考書: ・ 石畑:アルゴリズムとデータ構造、 岩波講座ソフトウェア科学 3、 岩波書店、 ISBN4-00-010343-1、1989 ・ 渋谷 : 東京大学工学教程情報工学アルゴリズム、 ISBN978-4-621-30113-5、 2016 ・ 田浦准教授の講義資料: http://www.logos.t.u-tokyo.ac.jp/~tau/lecture/computer_software/ 評価: 中間レポート+期末試験の予定 2018/06/05 2 1. 序論
インターネット上で公開されている無料で読める参考書籍や、記事をまとめました。 参考として、元になった書籍があるものについては、Amazon.co.jp へのリンクを併記していますが、無料公開されているものと同一である保証はありません。 購入を検討される場合は、公開されている内容と、実際に販売されている商品について、あらためてご自身でお調べください。 また、一般的な感覚からいえば、とうに消費期限を過ぎているような本が多いことにもご注意ください。 長期間リンク切れ状態になっているものは、適当なタイミングで削除します。 C言語 C++ Java C# VisualBasic Perl Python Ruby PHP JavaScript Lua Smalltalk .NETプログラミング UNIX/Linux BeOS TRON ゲームプログラミング ゲームデザイン 3Dプログラミング Web
初心者からのプログラミング入門、ソフトウェア開発の学習を支援する WisdomSoft のホームページです。
※2017年11月8日、「やさしいC 第5版」「かんたん C言語」「ふつうのLinuxプログラミング」「C言語による スーパーLinuxプログラミング」「モダンC言語プログラミング」のリンクを修正。 Amazonで評判が良い本を、発売日順に並べてみた。 入門書 脱 初心者 アルゴリズム リファレンス Linuxプログラミング プログラミング技術 デバッグ その他 厳選6冊 その他 Webサイト 入門書 『C言語改訂版1、2』を読んだ後に『独習C』を読めばだいたい理解できると思う。 やさしいC 第5版 (「やさしい」シリーズ) 作者: 高橋麻奈出版社/メーカー: SBクリエイティブ発売日: 2017/06/14メディア: 単行本この商品を含むブログを見る価格2,700円高橋麻奈さんの本はどれも分かりやすい(『やさしいJava』とか、『やさしいXML』とか)。ただし内容は薄いので、他のプログラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く