[JM:02995] Re: [POST:DP] GNU gettext msgfmt.1

アーカイブの一覧に戻る
IIJIMA Hiromitsu delmo****@denno*****
2021年 10月 14日 (木) 02:29:39 JST


いいじまです。

> > > .\"O ----------------------------------------
> > > .\"O .TP
> > > .\"O \fB\-a\fR, \fB\-\-alignment\fR=\fI\,NUMBER\/\fR
> > > .\"O align strings to NUMBER bytes (default: 1)
> > > .TP
> > > \fB\-a\fP, \fB\-\-alignment\fP=\fI\,NUMBER\/\fP
> > > 文字に対して NUMBER バイトを割り当てます (デフォルト: 1)。
> >
> > 文字→文字列 かな?
> >
> > そもそもこのオプションを理解していないので、
> > 適切なコメントができていないかもしれません。
> 
> 原文が strings なので「文字列」とします。
> 処理内容はソースを見ても、よくわかりませんでした。
> 文字列を出力する際のバッファサイズ(あるいは出力幅)
> を定めているのか、と推測します。
> 
> 再訳
> 文字列に対して NUMBER バイトを割り当てます
> (デフォルト: 1)。

バイト列に対してalignmentという場合、「各要素のサイズが既定のバイト数の倍数になるように調整する」という意味が強いです。ついでにいうと align X to Y bytes は「XをYバイトの位置に揃える」です。「XにYバイトを割り当てる」なら「allocate Y bytes to X」になるはずです。

☆ ☆ ☆

(以下、ご存知の方も少なくないと思いますがご容赦ください。)

たとえば、C言語でこんな構造体を作ったとします:

struct EXAMPLE
{
	char c;
	short i;
	double f;
};

この場合、x86の流れをくむCPUならたとえば
  c:構造体の先頭から0バイト目
  s:構造体の先頭から1-2バイト目
  f:構造体の先頭から3-8バイト目
  全体のサイズ:11バイト
という内部構造になっていても全く問題ありません。これが 1-byte alignment です。

ところが、最初から32bit以上で設計されたCPUの中には「16bitのデータは偶数の番地から、32bitのデータは4の倍数の番地から始まっていないといけない」という制約を持つものが多々あります。もちろん「64bitのデータは8の倍数の番地から」という制約もありえます。その場合、この構造体の内部構造は、たとえば次のようになっていなければいけません:

//4-byte alignmentの場合
  c:先頭から0バイト目
  //1バイトの空き
  i:先頭から2-3バイト目
  f:先頭から4-11バイト目
  全体のサイズ:12バイト

//8-byte alignmentの場合
  c:先頭から0バイト目
  //1バイトの空き
  i:先頭から2-3バイト目
  //4バイトの空き
  f:先頭から8-15バイト目
  全体のサイズ:16バイト

あるいはx86系でもSSE命令などを使う場合、画像1ピクセルの色情報が24bit(8x3)や48bit(16x3)だったとしても、CPUレジスタのビット数は2のべき乗ですから、メモリ上では
  struct RGB32 { unsigned char  r,g,b,dummy;};
  struct RGB64 { unsigned short r,g,b,dummy;}:
のように32bitや64bitのデータとして扱ったほうが効率がよくなります。

☆ ☆ ☆

元に戻って元の文章のalignmentの意味を考えると、デフォルトの 1-byte alignment ではたぶん、一つの文字列が終わったらヌルバイトを1個だけ置いてすぐ次の文字列が出力されるのだと予想します。
そしてたとえば 16-byte alignment を指定したとして、90バイトのテキストを出力する際には、90バイトの本文の後にヌルバイトを6個配置して全体で96バイトになるようにする、ということではないでしょうか。

これは結局のところ、実際に試して白黒つけるしかないと思います。

-- 
飯嶋 浩光/でるもんた・いいじま @ PC 
IIJIMA Hiromitsu, aka Delmonta
Email <delmo****@denno*****>



linuxjm-discuss メーリングリストの案内
アーカイブの一覧に戻る