No.2228![]() |
コンパイル後のグローバル変数を末尾XXXXX0hにしたい 投稿者---大仁田厚(2004/07/05 19:12:07) |
||
配列変数long型 A[4] のコンパイル後のメモリマッピングでAのグローバルアドレスを末尾 が0hにしないとうまく動作しないデバイスを使用としています。 普通にコンパイルすると、偶数ではマッピングされるのですが、 XXXX0hではマッピングされません。 HEXで末尾1桁を0からマッピングさせるやり方を ご存知の方いたら教えてください。 |
No.2229![]() |
Re:コンパイル後のグローバル変数を末尾XXXXX0hにしたい 投稿者---かずま(2004/07/05 19:32:55) |
||
#include <stdio.h> int main(void) { char a[sizeof(long) * 4 + 15]; long *A = (long *)((long)a + 15 & ~15); int i; printf("a=%p\n", a); printf("A=%p\n", A); for (i = 0; i < 4; i++) A[i] = i; for (i = 0; i < 4; i++) printf("%d\n", A[i]); return 0; } |
No.2230![]() |
Re:コンパイル後のグローバル変数を末尾XXXXX0hにしたい 投稿者---大仁田厚(2004/07/05 19:38:21) |
||
早速のご回答ありがとうございます。 さっそく試してみます。 |
No.2231![]() |
Re:コンパイル後のグローバル変数を末尾XXXXX0hにしたい 投稿者---ぽこ(2004/07/05 20:12:02) |
||
>ご存知の方いたら教えてください。 コンパイラにアライメントを指定する機能はありませんか? VC++の場合 __declspec(align(16)) int x; gccの場合 int x __attribute__ ((aligned (16))); とすることで変数xを16バイト境界に配置することが出来ると思います。 ※未確認。 #かずまさんの示された手法は、私にはトリッキーに見ますが、 #デバイスドライバ開発とかでは常識的な書き方なんでしょうか? |