- - PR -
C言語の構造体を配列の様に見る事は可能?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-08-26 11:20
「現場の知恵」だったのですが、「時代遅れの知恵」になってしまったようですね。。。
| ||||||||
|
投稿日時: 2004-08-26 13:06
>「現場の知恵」だったのですが、「時代遅れの知恵」になってしまったようですね。。。
そうではないんです。 現在でも適用できる「現場の知恵」です。 ただ、昔から比べると現場自体が膨れ上がってしまった。 色々な局面での活用を迫られて複数の知恵が必要になってしまったんです。 アライメント・short/int のバイト順・浮動小数点の内部形式・文字コードページのエンコーディング(バッファを3倍用意しないととか) 全て現場の知恵からもたらされた交換形式の検討すべきことに入ると思います。 他とのやり取りの無い局面も常にこれらのことを考慮するのは苦痛でしょう? _________________ えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12 えムナウのプログラミングのページ Blog1 Blog2 | ||||||||
|
投稿日時: 2004-08-26 13:13
C言語は、かなりCPUに依存というか、密着していました。しかし、.NET FrameworkやJavaでは、それらを考えるのはランタイム環境であって、プログラムではなくなりました。
また、他との連携も、バイナリファイルを直接やりとりするのではなく、Webサービスに代表されるXMLが使われると、バイトオーダーも必要なくなります。また、文字コードも、XMLライブラリが、XMLに埋め込まれた情報から判断します。 ・・・というところから、必要なくなってきたかな?と... | ||||||||
|
投稿日時: 2004-08-26 13:54
こんにちは。
いや、多分みんなわかってることかと。 今回はたまたま話題がバイト境界だっただけで。
前にJittaさんが書かれていましたが、単純に、今まで作ってきたものや文化の違いなだけかと。 私はOS屋さんなので、他とのやり取りが無いことなんて考えられないし、何百人単位のプロジェクトなため仕様書と実体が不一致なんてことはあってはならないです。 また、プログラマの技術力任せにするわけにもいかないため、問題の起こりそうな部分は徹底的に初期段階の設計時に排除する必要があり、バイト境界もその一つです。 このような環境では、これらの問題を予め対処しておくのは当たり前の話で空気のような存在であり、「今回は考慮する必要があるかどうか」という検討そのものが無意味なわけです。 もちろん、これとはまったく逆の世界の人もいるでしょうね。 [ メッセージ編集済み 編集者: okutin 編集日時 2004-08-26 13:55 ] [ メッセージ編集済み 編集者: okutin 編集日時 2004-08-26 13:56 ] | ||||||||
|
投稿日時: 2004-08-26 16:04
C言語って、いろんな環境で使用されますからねえ。
こんな世界も、あるってことで: 以前(すっごく昔)に友人から聞いた話なのでうろ覚えですが、 Clay X-MP の Cコンパイラで、struct sample { char data[2]; }; で sizeof(struct sample) が 16 byteだったとか。 (ワードマシンで、1ワード=8バイトだから) # 要するに、Crayで char なんて扱うな、ということらしい。 同じく、最近、友人から聞いた話。 お手製の並列Cコンパイラ(オリジナルCPUなので、Cコンパイラが市場に 存在しない。)で、sizeof(double) が 128 bit だとか。 | ||||||||
|
投稿日時: 2004-08-26 16:47
これって書いてることがちょっとおかしかったりしないですか? | ||||||||
|
投稿日時: 2004-08-27 00:05
struct sample {
char data[2]; } が、アドレス A から配置されるとすると、メモリ上では こんな風になって(□が1バイトとして、char が■の部分で、残りの□は不定) アドレス A ■□□□□□□□ アドレス A+1 ■□□□□□□□ で、sizeof(struct sample) が 16 byte、になるのではないかと。 | ||||||||
|
投稿日時: 2004-08-27 00:18
あ、実際はそんな感じな気もするんですけど、 その場合、sizeof(struct sample)は2になりません? |