cに関するm0t0m0t0のブックマーク (81)

  • printfの先をほんの少し掘ってみた | DevelopersIO

    こんにちは、高崎@アノテーション です。 はじめに X にて下記のポストがありました。 ちょっと興味があったので、ソースを取得して少し掘ってみたので記事にします。 動作環境 動作環境については、下記をベースとします。 Ubuntu 24.04 LTS CPU x86_64 下記のソースの printf で考えてみる #include <stdio.h> #include <stdlib.h> int main() { printf("Hello, world.\n"); return 0; } wataru@ubuntu-24-04:~$ ldd --version ldd (Ubuntu GLIBC 2.39-0ubuntu8.3) 2.39 Copyright (C) 2024 Free Software Foundation, Inc. This is free software;

    printfの先をほんの少し掘ってみた | DevelopersIO
  • C言語の知られザル・許されザル仕様 - Qiita

    はじめに どうも、y-tetsuです。 かれこれC言語には、10年以上携わっているのですが、最近ふと学びなおしをしています。 「Cクイックリファレンス第2版」これを完走めざして読み始めました。全816ページの超大作! 先は長いので、日頃からかたわらに置いておき、表紙の牛さん(雌牛)と目が合ったら黙って少し読むようにしています。 言語の"歴"だけは長い筆者ですが、このをちらっと読んだだけでもいまだに知らなかったことが結構潜んでいました。意外と己の"目"ってザルでした。 そんなこんなで学びなおしのため、今回は筆者が感じたままの知られザルそして許されザルなC言語の仕様について、備忘録を残します。 知られザル仕様 恥ずかしながら、今まで存じ上げザルだったシリーズ。 ダイグラフ 名前からして???だったんですが、キーボードによっては存在しない記号を別の2文字で表わすためのものだそうです。 !?…っ

    C言語の知られザル・許されザル仕様 - Qiita
    m0t0m0t0
    m0t0m0t0 2024/08/29
  • 【C言語】ハァ… 困ったなァ 「未定義動作」にもう疲れちゃって 全然動けなくてェ… - Qiita

    はじめに どうも、y-tetsuです。 以前、こんな記事でお世話になりました。 お久しぶりです。あい変わらずC言語の学びなおしにいそしんでおります! いやー、C言語ってムズカシイですよね。最初は文法がとっつきづらかったり、ポインタでつまずいたり、慣れてきたら慣れてきたで色んな災いが出てきたり…で、結果「もう疲れちゃって 全然動けなくてェ…」っておもわずヘコたれそうになります…。 最近、筆者がC言語を学びなおしてみて新しく知った事としまして、「未定義動作」というものがありました。なんだこれはァ!?という事で少しずつ調べる中で、これがまァー「もう疲れちゃって 全然動けなくてェ…」を引き起こす要素が"満載"な代物でした。 そこで今回は、様々な未定義動作にフォーカスした内容を、ご紹介していきたいと思います。 (正直なところ、ご存じの方からすると何番煎じだよ!?という中身なのですが、筆者自身の自学習

    【C言語】ハァ… 困ったなァ 「未定義動作」にもう疲れちゃって 全然動けなくてェ… - Qiita
    m0t0m0t0
    m0t0m0t0 2024/08/29
  • OS徒然草 (1) - VA Linux エンジニアブログ

    はじめに コンピュータのアーキテクチャ プログラムの構造 あとがき 執筆者 : 小田 逸郎 はじめに 筆者は自分のことを OS 開発者 (OS屋) だと思ってます。最近は、OSにあまり深く関われていないのですが、筆者が若かりし頃に情熱を注いだものであり、筆者の基盤をなしているものであることには間違いないです。 筆者が OS (UNIX) の開発に携わり始めたのは、1986年のことなので、もう40年近く経ってしまいました。その間に OS の規模も随分大きくなってしまったようです。 筆者が始めた頃の UNIX は、デバイスドライバを除くと、20K行くらいだったと記憶しています。 全コードをラインプリンタで出力、コピー、製し、皆で読み合わせて、勉強会をしたりしていました。そんなことができる分量だったのです。 今の Linux の規模はどれくらいでしょうか。筆者たちが「Linuxカーネル 2.6

    OS徒然草 (1) - VA Linux エンジニアブログ
  • strlen() の深淵 - Qiita

    あらまし 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 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
    m0t0m0t0
    m0t0m0t0 2023/08/07
  • Ultra96 で Julia set をぐりぐり動かせるやつを作った | Tosainu Lab

    import { Image } from 'astro:assets'; import dmabufSvg from './dmabuf.svg'; import nodmabufSvg from './nodmabuf.svg'; [Ultra96](https://www.96boards.org/product/ultra96/) というデバイスがあります。Ultra96 は Xilinx 社の [Zynq UltraScale+ MPSoC](https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html) が載っている開発ボードで、[FPGA](https://en.wikipedia.org/wiki/Field-programmable_gate_array) 開発から最新の AR

    Ultra96 で Julia set をぐりぐり動かせるやつを作った | Tosainu Lab
  • 詳解V4L2 (video for linux 2)

    この記事は「自動運転システムをエッジデバイスに組み込むための技術」を3回に分けて紹介するTURINGのテックブログ連載の第3回の記事「詳解V4L2 (video for linux2)」です。 第1回の「C++OpenCV完全入門!」、第2回の「OpenCVをNPPにした結果→10倍高速に!」もぜひご覧ください! はじめに こんにちは。TURING株式会社(以下、TURING)で、インターンをしている東大B3の中村です。 TURINGは、完全自動運転EVを作ることを目的に設立されたベンチャー企業です。自動運転システムとそれを搭載したEV車の開発を行っています。 TURINGの自動運転システムは、カメラからの映像入力を肝としています。これまではOpenCVを入力のインターフェイスとして利用していました。OpenCVを使用していたのは、 buildや使用法についての情報が多い コードが簡単に

    詳解V4L2 (video for linux 2)
  • Minimal cross-platform graphics

    I grew up with BASIC and Turbo Pascal. My first programs were very simple graphical games. I still miss the era of BGI and BASIC’s painting commands. Those graphics were neither beautiful nor fast, but they were simple. Simple enough for a kid with only elemental geometry knowledge to build something exciting. Even today, whenever I want to prototype or visualise something, to experiment with gene

  • eBPFに3日で入門した話 - CADDi Tech Blog

    はじめに eBPF とはなにか ざっくり概要 「Packet Filter」なのに「Virtual Machine」? eBPFでなにができるか? カーネルイベントのフック ユーザーランドアプリケーションとのやりとり eBPFの主な用途 eBPFが注目される背景 eBPFの仕組み アーキテクチャと処理フロー カーネルモジュールとeBPFの違い eBPFプログラムの作り方 eBPFプログラムを作ってみる 環境の準備 Hello world もう少し複雑なサンプル その他のサンプル HTTPリクエストのダンプ TCP接続先の調査 tcplife dirtop filetop oomkill まとめ eBPFはなにに使えるか 参考サイト はじめに こんにちは、Platformチームの小森です。 eBPF (extended Berkley Packet Filter) について、2022年8月2

    eBPFに3日で入門した話 - CADDi Tech Blog
  • ZigはCMakeの代替となるか

    既存のプロジェクトで使用しているコンパイラを置き換えるだけで、Zigに付属しているCコンパイラを利用できる。 クロスビルドが標準で可能 上でも述べた通り、Zigは標準でクロスコンパイルが可能である。 Zig libcのTaget一覧 ❯ zig targets | jq ".libc" [ "aarch64_be-linux-gnu", "aarch64_be-linux-musl", "aarch64_be-windows-gnu", "aarch64-linux-gnu", "aarch64-linux-musl", "aarch64-windows-gnu", "aarch64-macos-none", "aarch64-macos-none", "armeb-linux-gnueabi", "armeb-linux-gnueabihf", "armeb-linux-musleabi

    ZigはCMakeの代替となるか
    m0t0m0t0
    m0t0m0t0 2022/08/09
  • Linuxカーネルが難しい?Rustで実装できそう!

    「ついに、RustLinuxカーネルを実装できる!」 待ち望んだ感を出してみましたが、2年前に記事を書いてから、すっかり忘れていました。LinuxカーネルのRustサポートについての意見を求められたら、「技術的には面白いけど、実用レベルではないね。」と、上から目線の回答でエンジニアレベルの高さをアピールするつもりでしたが、2年間の間、誰にも聞かれませんでした。 近々、LinuxカーネルにRustサポートが取り込まれそう、ということで、デバイスドライバを実装してみました。 Rust対応カーネルのコンパイルまずは、Rust対応を有効にしたLinuxカーネルをコンパイルする必要があります。「カーネルってコンパイルするものなの?」という読者は、ネットの長老たちに叡智を求めましょう。「インストール直後に、メモリ削減のために不要な機能を無効にして、カーネルコンパイルしたんじゃ。」というような、太古の

    Linuxカーネルが難しい?Rustで実装できそう!
  • 【Ruby】LinuxとRubyとCoW - 地方エンジニアの学習日記

    hiboma.hatenadiary.jp こちらのアンサー記事を書いてみますw なぜ CoW の話が出てきたのか なぜCoWを気にしたのかを話すとまず社内で動かしているAPIサーバがメモリ利用過多となってアラートがなったのが話のスタートでした。サービス自体はUnicornを使って動いています。 メモリ利用過多となったときに調べる手法は言語ごとに様々ですが私はRubyの経験がほぼなくプロファイラなども使ったことがありません。この状況でできることは/procを見るくらいしかなかったので/proc/$pid/smapsを見始めました。そこで始めたのがメモリ共有率の計算でした。 以下のツールを書いてUnicornの親子プロセスのメモリ共有率を確認するとなんと40~60%程度となっていて「え!?」ってなったのが始まりでした。プロセスの生存期間が長いのかと思ったのですが起動時間も出すと数分前に起動し

    【Ruby】LinuxとRubyとCoW - 地方エンジニアの学習日記
  • オープン化が進むC++の現状と展望

    Rubyとクリエイティブコーディングの輪の広がり / The Growing Circle of Ruby and Creative Coding

    オープン化が進むC++の現状と展望
    m0t0m0t0
    m0t0m0t0 2021/08/26
  • 俺のlsが遅すぎる - Qiita

    なぜ? 必要に迫られてオレオレなlsを書いたのだがなぜか遅い。大したことしていないのに遅い。 コード 特に変なところはないと思うのだけど... #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <dirent.h> #include <pwd.h> int main(int argc, char** argv) { char fpath[PATH_MAX]; DIR* dir; struct dirent* dp; struct stat st; struct passwd *pw; char *dpath; dpath = (argc != 2) ? "." : argv[1]; dir = opendir(dpath); while ((dp = readd

    俺のlsが遅すぎる - Qiita
  • 2のべき乗サイズの配列は危ないという話 via 行列積 - elkurin’s blog

    こんにちは。労働者です。とあるプログラムで学生さんの課題を添削していたら面白い話に出会いました。 僕は今、主に学部生向けのインターン研修的なプログラムでメンターなるものをやっています。メンターとしての仕事は、学生さんの課題へフィードバックを返し、Office Hourというセッションを毎週設けて質問受けやCSに関するトークを行うといった内容になっています。今回話題に取り上げるのはその中の課題の1つ、「行列積のプログラムを書いて時間を計測せよ」という何気ない話で、続く課題たちのいわば前座のようなものです。こういったところに沼は隠されているものですね。 担当している学生さんたちが細かい実験を行ってくれて以下のような疑問が提示されました。 「行列積の計算が N = 1024のときだけ N = 1023, 1025のときに比べて3倍遅いのはなぜ?」 配列のサイズが2のべき乗になるのは避けるべきとい

    2のべき乗サイズの配列は危ないという話 via 行列積 - elkurin’s blog
  • モダンプログラマになれない組込みプログラマの苦悩 - Qiita

    はじめに 10年以上組込みエンジニアをしている@yagisawaです。 Qiitaのトップ記事では新しいフレームワークの使い方とかモダン言語の新しい言語仕様の解説とかが流れてきて、いつも羨ましいなーと思いながら読んでいます。 記事は組込みシステム開発をしていて経験したこと・感じたことを自虐ネタとして書き連ねていこうと思います。他ITエンジニアの人に「うわっ、可愛そう」って思ってもらうのが目標です(ぇ 各業界それぞれに悩みはあると思うので、自分たちが一番不幸とかは思っていません。おそらく隣の芝が青く見えているだけです。それよりあまり組込みの記事は見かけないので、「組込みエンジニア仕事ってこんな感じ」というのを知ってもらう意図があったりします。 内容によっては「それはあなたの設計が悪いからです」と言われてしまうようなところもあるとは思いますが、建設的なご意見は大歓迎ですが基は温かい目で見

    モダンプログラマになれない組込みプログラマの苦悩 - Qiita
  • Unixドメインソケットの確認 - Qiita

    プロセス間通信といえば、pipeや共有メモリ、Unixドメインソケットを使用することが多いと思います。 あまり参考にはならないかもしれませんが、Unixドメインソケットについて少し実演してみたいと思います。 Unixドメインソケットとは 同一ホスト内でのプロセス間通信に使用できる。 一般的に通常のTCP接続よりもパフォーマンスがいいとされている。 リバースプロキシ、DB接続などでよく使われています。 サーバー #define UNIXDOMAIN_PATH "/tmp/server.sock" int main(int argc, char *argv[]){ int clifd, lsnfd; struct sockaddr_un cliaddr, srvaddr; struct pollfd fds[1] = {0,}; lsnfd = socket(AF_UNIX, SOCK_STR

    Unixドメインソケットの確認 - Qiita
  • GitHub - Immediate-Mode-UI/Nuklear: A single-header ANSI C immediate mode cross-platform GUI library

    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

    GitHub - Immediate-Mode-UI/Nuklear: A single-header ANSI C immediate mode cross-platform GUI library
    m0t0m0t0
    m0t0m0t0 2021/02/22
  • フルスクラッチから作って理解するQEMU (Rust編) - FPGA開発日記

    モチベーション なぜRustを選んだか? 私はQEMUは「アーキテクチャエミュレーション界のLLVM」だと思っている QEMUが高速な理由:TCG Binary Translation ゲスト命令(RISC-V) → TCGホスト命令(x86)の処理をRustで作ろう RISC-Vの命令をフェッチしてデコードする RISC-Vの命令をTCGに変換する TCGをx86に変換する 実装結果 Binary Translation実行を高速化するための様々なテクニック BasicBlock分まで複数命令をまとめて変換 TCG Block Chainingの実装 評価結果 TB Lookup and Jumpの実装 評価結果 まだ完成していないところ 一部の最適化はまだ未実装となっている ゲストアーキテクチャがx86のみとなっている。TCGによる複数プラットフォーム対応として、まずは環境のそろ

    フルスクラッチから作って理解するQEMU (Rust編) - FPGA開発日記
  • 「この位置にprintfが無いとなぜか動かないんだ。」 - Qiita

    はじめに 先日ツイッターで見かけた呟き pic.twitter.com/33Yk02hu1U — TOMO (@tomozh) October 14, 2020 そういうこともあるのか的な反応もあるようなので具体例を挙げてみることにする。 例1 所謂FizzBuzz問題。 #include <stdio.h> void fizzbuzz(int n) { int next; int i = 1; do { printf(i % 15 ? i % 5 ? i % 3 ? "%d\n" : "Fizz\n" : "Buzz\n" : "FizzBuzz\n", i); if (i++ >= n) next = 0; } while (next); } int main(void) { printf((char[]){""}); // この位置にprintfが無いとなぜか動かない fizzbuz

    「この位置にprintfが無いとなぜか動かないんだ。」 - Qiita