←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4678

構造体要素のサイズ指定について
投稿者---初心者(2005/10/03 18:58:04)


何時もお世話になっております。構造体に関する質問です。
構造体要素として2つの整数型変数を指定したいのですが、
容量節約のために一方についてはshort intとすることを検討しています。
そこで以下のようなプログラムをBCC5.5で実行させてサイズを確認
したのですが、期待していた2+4=6バイトではなくて8バイトに
なってしまいます。このような指定は不可能なのでしょうか。


#include <stdio.h>

void main(){

  typedef struct{
    short int i;
    int j;
  } A;

  printf("%d\n", sizeof(A));

}





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体要素のサイズ指定について 4679 Blue 2005/10/03 21:15:33
<子記事> Re:構造体要素のサイズ指定について 4680 zero 2005/10/03 21:24:13
<子記事> Re:構造体要素のサイズ指定について 4681 si 2005/10/03 21:29:26
<子記事> Re:構造体要素のサイズ指定について 4682 RiSK 2005/10/03 21:56:42
<子記事> Re:構造体要素のサイズ指定について 4685 nop 2005/10/04 08:59:42
<子記事> 御礼 4686 初心者改めshige 2005/10/04 11:12:21


No.4679

Re:構造体要素のサイズ指定について
投稿者---Blue(2005/10/03 21:15:33)


> したのですが、期待していた2+4=6バイトではなくて8バイトに
「C言語 構造体 アライメント」を参考にしてみてください。

VCならば、設定で換えれるのですがBCCはわからないです。すいません。

それと、HNを再度考え直したほうがいいです。初心者等の名前は嫌われます。
(捨てハンや、真剣に聞いていないととらわれる)



この投稿にコメントする

削除パスワード

No.4683

Re:構造体要素のサイズ指定について
投稿者---まきじ(2005/10/04 00:15:42)


>BCCはわからないです。すいません。

bcc32 -a4 でアライメントを 4 バイトにできます。
- (デフォルト) 1 2 4 8 16 が指定可能です。
数値の指定なしだとワード単位でアライメント。


この投稿にコメントする

削除パスワード

No.4684

Re:構造体要素のサイズ指定について
投稿者---Blue(2005/10/04 00:31:22)


>>BCCはわからないです。すいません。
まぁ、一応質問者に調べてねという意味合いで書いたつもりでした。
BCCでどうかくかは、自分で調べること出来ますからね。
(書いてすぐ他の方のレスで、#pragma〜の使用例がでてしまったのであんま意味なかったですけど。)
# といっても、私も調べなきゃワカランかったですからね。
# 情報提供ありがとうございました。



この投稿にコメントする

削除パスワード

No.4680

Re:構造体要素のサイズ指定について
投稿者---zero(2005/10/03 21:24:13)


#include <stdio.h>

/* アラインメントを1バイトに変更 */ 
#pragma pack(push, 1)
typedef struct {
    int j;
    short i;
} A;
/* アラインメントを元の4バイトに戻す */
#pragma pack(pop)

int main(int argc, char *argv[]) {


    printf("%d\n", sizeof(A));

    return 0;
}


これでうまくいきませんか?


この投稿にコメントする

削除パスワード

No.4681

Re:構造体要素のサイズ指定について
投稿者---si(2005/10/03 21:29:26)


#include <stdio.h>
#pragma pack (2) /* 構造体アライメントをワード境界にする */
void main(){


この投稿にコメントする

削除パスワード

No.4682

Re:構造体要素のサイズ指定について
投稿者---RiSK(2005/10/03 21:56:42)


>このような指定は不可能なのでしょうか。

詰め物は処理系によりますので,
標準Cのみの汎用性のある方法はないです。


この投稿にコメントする

削除パスワード

No.4685

Re:構造体要素のサイズ指定について
投稿者---nop(2005/10/04 08:59:42)


>容量節約のために一方についてはshort intとすることを検討しています。

容量の節約よりも、そのメンバの意味合いと取り得る値から、
本当にその型が適切なのか?を考えるべきです。
今のPCで、まして初心者の内にそのような事を気にする必要はないと思います。


この投稿にコメントする

削除パスワード

No.4686

御礼
投稿者---初心者改めshige(2005/10/04 11:12:21)


ご回答いただきました皆様

貴重なアドバイスをありがとうございました。
intのみだと1GB近くになる膨大なデータを保存する必要があったので
short intの使用を検討したのです。
zero様、si様の方法でうまくいくようになりました。
アライメントについては改めて勉強させていただきます。
本当にありがとうございました m(_ _)m



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity