タグ「C言語」を含む投稿[64件](7ページ目)
今扱っている課題ではハードウェアの処理能力を出来るだけ主題の処理に振り向けたいのです。
C/C++の使用やポインタの活用は大いに貢献しそうですが、プロセス間通信をポインタを介して行うことは今時のOSでは無理っぽい。プロセスの独立性をOSがガッチリ固めるからです。
プロセス間で通信するにはOSがマネージするpipeや共有メモリを用いないといけません。幸い、pythonで同様のことをするよりも処理速度が速いようなので現実的ではありますが、このレベルの情報になりますとその筋の上級者が書いているので前提が高度で完全理解には程遠いところです。もっと基礎を固めないといけません。
現時点では同プロセス内でのスレッド処理で構成するのが現実的かなと。
同プロセス内ならポインタを介してスレッド間で変数を共有できるそうです。
ただ、Art-Netエンジン(受信/パッチ/送信の一連処理)を独立したプロセスにしたいので、いずれはプロセス間通信を多用出来る技術も習得しないといけません。
理解には及んでいませんが、芸は無いけど速度が出せる共有メモリが一番良さそうです。
追記
プロセス間でのメモリ共有
説明は少ないですが、サンプルコードに余計な装飾がありませんし、ほぼANSI-Cで書かれているので理解しやすい。
共有メモリを宣言し、そのメモリのアドレスを数値としてポインタ変数に渡しているだけです。別プロセスへのアドレスの渡し方が地味ですが、動作を理解するにはこれでいいのです。単に値が渡ればいいのか、特別な手段で渡すのか、明確にわかります。
これを習得出来たら楽になりますね。
#C言語
C/C++の使用やポインタの活用は大いに貢献しそうですが、プロセス間通信をポインタを介して行うことは今時のOSでは無理っぽい。プロセスの独立性をOSがガッチリ固めるからです。
プロセス間で通信するにはOSがマネージするpipeや共有メモリを用いないといけません。幸い、pythonで同様のことをするよりも処理速度が速いようなので現実的ではありますが、このレベルの情報になりますとその筋の上級者が書いているので前提が高度で完全理解には程遠いところです。もっと基礎を固めないといけません。
現時点では同プロセス内でのスレッド処理で構成するのが現実的かなと。
同プロセス内ならポインタを介してスレッド間で変数を共有できるそうです。
ただ、Art-Netエンジン(受信/パッチ/送信の一連処理)を独立したプロセスにしたいので、いずれはプロセス間通信を多用出来る技術も習得しないといけません。
理解には及んでいませんが、芸は無いけど速度が出せる共有メモリが一番良さそうです。
追記
プロセス間でのメモリ共有
説明は少ないですが、サンプルコードに余計な装飾がありませんし、ほぼANSI-Cで書かれているので理解しやすい。
共有メモリを宣言し、そのメモリのアドレスを数値としてポインタ変数に渡しているだけです。別プロセスへのアドレスの渡し方が地味ですが、動作を理解するにはこれでいいのです。単に値が渡ればいいのか、特別な手段で渡すのか、明確にわかります。
これを習得出来たら楽になりますね。
#C言語
オレメモです。
● C言語のポインタ
私の理解ですが、ポインタとは変数の扱い方の一つで、定義した名称ではなくメモリ上のアドレスを指定して変数にアクセスする方法です。変数のアドレス得る方法と、アドレス指定で変数を読み書きする方法の二つを総称したものとなります。
OSやプログラム言語はハードウェアを直視せずに済ませるためにあるのですが、ポインタはその意図に反して原始的なアプローチでメモリに直接アクセスする方法だと言ってもよいようです。
様々な解説では変数のアドレス得る方法とアドレス指定で変数を読み書きする方法、さらにポインタの効能を混在させて説明するので分かりにくいのです。
先達の意図には反しますが、少しアプローチを変えて書いてみようと思います。
ただし、変数とは保存先を表す<アドレス>と保存されている<数値>で構成されているので、この辺りが頭にイメージ出来ないと以下は理解不能だと思います。
任意のアドレスをユーザが設定することも可能ですが、OSや言語が割り当てるアドレスを使うのが普通。いや、勝手に決めて正常に動くことはまず無いでしょう。
変数のアドレスを得る方法
変数を定義するなら、
int data;
などと書けばいい。この段階で保存先のアドレスは決定されています。というか、変数が持つ情報の実体は保存先を表すアドレスです。
この変数のアドレス値を得るなら、
&data
とすればいい。変数名の前に<&>(アンパサンドと読むらしい。アンドではないそうな)を付けて装飾すると変数のアドレスを表します。
単に変数名とすれば中身を読み書き出来、変数名の頭にアンパサンドを付ければ保存先アドレスを読み書き出来るのです。
例えば、変数の中身を表示するなら、
printf("変数の中身:%d\n", data);
アドレスを表示するなら、
printf("変数の格納先アドレス:%d\n", &data);
となります。
アドレス指定で変数を読み書きする方法
変数のアドレスを保存するための変数はポインタ変数と呼ばれる特殊なものです。
通常変数と違って
int *addr;
とか
char *str_addr;
などと定義します。変数の前に<*>(アスタリスク)を付けて装飾することでポインタ変数だと宣言します。
アドレスを格納するには<*>を付けず、
addr = &data;
とします。
アドレス指定(ポインタ)で変数を読み出すには、
num = *addr;
とします。上記に続くなら変数dataの内容が変数numに入ります。
書き込むなら、
*addr = 10;
となり、変数dataの内容も10になります。何故なら、dataも*addrも同じアドレス(実体)にアクセスするからです。
ポインタの活用方法、動的変数、静的変数なども理解しなければなりませんが、先達の情報以上のことは書けそうありません。
自分ナリの整理は付きましたし、数か月後の自分が再理解できると思うのでここまで。
#C言語
● C言語のポインタ
私の理解ですが、ポインタとは変数の扱い方の一つで、定義した名称ではなくメモリ上のアドレスを指定して変数にアクセスする方法です。変数のアドレス得る方法と、アドレス指定で変数を読み書きする方法の二つを総称したものとなります。
OSやプログラム言語はハードウェアを直視せずに済ませるためにあるのですが、ポインタはその意図に反して原始的なアプローチでメモリに直接アクセスする方法だと言ってもよいようです。
様々な解説では変数のアドレス得る方法とアドレス指定で変数を読み書きする方法、さらにポインタの効能を混在させて説明するので分かりにくいのです。
先達の意図には反しますが、少しアプローチを変えて書いてみようと思います。
ただし、変数とは保存先を表す<アドレス>と保存されている<数値>で構成されているので、この辺りが頭にイメージ出来ないと以下は理解不能だと思います。
任意のアドレスをユーザが設定することも可能ですが、OSや言語が割り当てるアドレスを使うのが普通。いや、勝手に決めて正常に動くことはまず無いでしょう。
変数のアドレスを得る方法
変数を定義するなら、
int data;
などと書けばいい。この段階で保存先のアドレスは決定されています。というか、変数が持つ情報の実体は保存先を表すアドレスです。
この変数のアドレス値を得るなら、
&data
とすればいい。変数名の前に<&>(アンパサンドと読むらしい。アンドではないそうな)を付けて装飾すると変数のアドレスを表します。
単に変数名とすれば中身を読み書き出来、変数名の頭にアンパサンドを付ければ保存先アドレスを読み書き出来るのです。
例えば、変数の中身を表示するなら、
printf("変数の中身:%d\n", data);
アドレスを表示するなら、
printf("変数の格納先アドレス:%d\n", &data);
となります。
アドレス指定で変数を読み書きする方法
変数のアドレスを保存するための変数はポインタ変数と呼ばれる特殊なものです。
通常変数と違って
int *addr;
とか
char *str_addr;
などと定義します。変数の前に<*>(アスタリスク)を付けて装飾することでポインタ変数だと宣言します。
アドレスを格納するには<*>を付けず、
addr = &data;
とします。
アドレス指定(ポインタ)で変数を読み出すには、
num = *addr;
とします。上記に続くなら変数dataの内容が変数numに入ります。
書き込むなら、
*addr = 10;
となり、変数dataの内容も10になります。何故なら、dataも*addrも同じアドレス(実体)にアクセスするからです。
ポインタの活用方法、動的変数、静的変数なども理解しなければなりませんが、先達の情報以上のことは書けそうありません。
自分ナリの整理は付きましたし、数か月後の自分が再理解できると思うのでここまで。
#C言語
昼休みにC言語の教科書を読み直しています。
「改訂第3版 ANSI C 対応 はじめてのC」
(ANSIとはアメリカの工業規格です。ANSIの影響力は絶大で、C言語を名乗るならコレを基本とするのが絶対条件です。派生や方言はあれど、ANSI Cに準じて書かれたコードが動かなければC言語環境ではないのです。)
平成7年改訂の少々古い版ですが、変化球な例題が少なく理解しやすい教科書です。
買った当時は内容の1/5も理解出来ませんでしたが、今は書いてあることがストレス無く理解できるような気分。あくまで気分ですケド。
Pythonなどの今時言語に比べるとC言語の表記は堅苦しいのですが、PICのアセンブラが一番好きな身には違和感が無く、堅苦しさの裏返しは曖昧さが無いことですから私はストレスを感じません。Pythonだってnumpyに代表されるライブラリを使うなら変数の型に気を配った堅苦しい書き方をするのですから同じことです。
まずは基本記述と変数とポインタの扱い方をシッカリ頭に入れましょう。この教科書には改訂版(2008年改訂5版)があるのでポチってみました。基本となるこの2冊を読破すれば何とかなるっしょ。道のりは長いものの、オブジェクト指向(C++)の記述まで習得出来れば初級卒業です。アセンブラな感覚で書くならば純ANSI-Cだけでいいのですが、今時のライブラリを使うにはオブジェクト指向の習得が必須です。
Art-NetパッチとライトアップIoTコンソールが当面の課題です。
#C言語
「改訂第3版 ANSI C 対応 はじめてのC」
(ANSIとはアメリカの工業規格です。ANSIの影響力は絶大で、C言語を名乗るならコレを基本とするのが絶対条件です。派生や方言はあれど、ANSI Cに準じて書かれたコードが動かなければC言語環境ではないのです。)
平成7年改訂の少々古い版ですが、変化球な例題が少なく理解しやすい教科書です。
買った当時は内容の1/5も理解出来ませんでしたが、今は書いてあることがストレス無く理解できるような気分。あくまで気分ですケド。
Pythonなどの今時言語に比べるとC言語の表記は堅苦しいのですが、PICのアセンブラが一番好きな身には違和感が無く、堅苦しさの裏返しは曖昧さが無いことですから私はストレスを感じません。Pythonだってnumpyに代表されるライブラリを使うなら変数の型に気を配った堅苦しい書き方をするのですから同じことです。
まずは基本記述と変数とポインタの扱い方をシッカリ頭に入れましょう。この教科書には改訂版(2008年改訂5版)があるのでポチってみました。基本となるこの2冊を読破すれば何とかなるっしょ。道のりは長いものの、オブジェクト指向(C++)の記述まで習得出来れば初級卒業です。アセンブラな感覚で書くならば純ANSI-Cだけでいいのですが、今時のライブラリを使うにはオブジェクト指向の習得が必須です。
Art-NetパッチとライトアップIoTコンソールが当面の課題です。
#C言語
そんなワケでC/C++の再勉強を始めたワケですがPythonよりも難しい。
基本的な文法は簡単ですが、ライブラリの考え方が前世代的ですので、どの関数がどのライブラリからの物なのか因果関係を理解するのに一手間余計にかかります。
また、ポインタの考え方も理解はしているつもりですがソースを書こうとすると頭が混乱します。このあたりは慣れなんでしょうが、マネージされている今時の言語の便利さを痛感。
だとしても、ポインタとライブラリの扱い方を攻略出来ればPythonと大差なく書けそうです。
#C言語
基本的な文法は簡単ですが、ライブラリの考え方が前世代的ですので、どの関数がどのライブラリからの物なのか因果関係を理解するのに一手間余計にかかります。
また、ポインタの考え方も理解はしているつもりですがソースを書こうとすると頭が混乱します。このあたりは慣れなんでしょうが、マネージされている今時の言語の便利さを痛感。
だとしても、ポインタとライブラリの扱い方を攻略出来ればPythonと大差なく書けそうです。
#C言語