次のコードがありました:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory>
#include <string.h>
int main()
{
char a = 'A';
unsigned int b = 1000;
char* arr = (char*)malloc(sizeof(a));
memcpy(arr, &a, sizeof(a));
arr = (char*)realloc(arr, sizeof(arr) + sizeof(b));
memcpy(arr + sizeof(a), &b, sizeof(b));
const char* pData = arr;
assert(*pData == a);
pData += sizeof(a);
assert(*(unsigned int*)pData == b);
printf("finished\n");
}
このコードは、x86 の前身であるシステムでは問題なく動作しますが、Blackfin デバイスでは失敗します。Blackfin デバイスでエラーが発生しました。エラーメッセージの最初の行は次のとおりです。
データ アクセスの不整列アドレス違反
Blackfin プロセッサは、データをワード サイズにアラインメントしないと動作しないと読みました。次に、次のコードを試しました:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory>
#include <string.h>
int main()
{
char a[] = "AAA";
unsigned int b = 1000;
char* arr = (char*)malloc(sizeof(a));
memcpy(arr, &a, sizeof(a));
arr = (char*)realloc(arr, sizeof(arr) + sizeof(b));
memcpy(arr + sizeof(a), &b, sizeof(b));
const char* pData = arr + sizeof(a);
assert(*(unsigned int*)pData == b);
printf("finished\n");
}
このコードは、x86 および Blackfin ハードウェアで動作します。ここで質問があります:コードから手動でデータを整列させる方法はありますか?
清聴ありがとうございました!