誰かが私のスタックベースのアロケータを手伝ってもらえますか?
static char Stack[MAX_SIZE];
static char *top = &Stack[0];
class STACKED {
public:
static void *operator new(size_t size) {
//Add this context to the context stack.
void *Result;
assert( (top + size) <= &Stack[MAX_SIZE] );
Result = top;
top = top + align_sizeof(size);
return Result;
}
static void operator delete(void *p) {
//Its a stack, and delete only removes the top entry.
// So *p represents where to delete to.
top = (char *)p;
}
static size_t align_sizeof(size_t object_size) {
// TODO: Align objects.
return object_size;
}
};
1)スタックがオーバーフローするかどうかを検出するためのアサートは正しいですか?
2)align_sizeof()-パフォーマンス/バスの問題のためにこれらのオブジェクトを整列させたい。しかし、私はアライメントを完全には理解していません。誰かがメモリアライメントを説明し、スタックオブジェクトをアライメントする式を提案できますか?
2a)私の現在の考えは、オブジェクトのサイズを「切り上げ」て、上部が常に整列するようにすることです。必要以上のメモリを効果的に割り当てます(最後にパディングを配置します)。
3)静的文字スタック[MAX_SIZE]も整列する必要があると思います-これを行うにはどうすればよいですか?
ありがとうございました!
PS他のコメントはいつでも歓迎します