编辑时,我需要把记忆分配给三个不同的阵列,每个阵列与三个同等规模的记忆库分别分配。 从第一个银行开始,这些阵列被宣布为最高银行规模。 其余记忆由下一家银行分配。 银行不相邻。
举例来说,假设我们需要分配2.5K的记忆,每个银行的最大规模是1K。 我们在银行1中拨款1K,在2行中再分配1K,其余500英特在3行:
std::array<uint8_t, 1000> bank1; // 1K
std::array<uint8_t, 1000> bank2; // 1K
std::array<uint8_t, 500> bank3; // 500 bytes
如果在随后的银行中没有留下任何记忆,那么它就没有宣布一个阵列。 如果有的话,它只是失败了。
迄今为止,我难以提出申报和分行。
// Define the maximum bank size (1K in this example)
constexpr std::size_t MaxBankSize = 1000;
// Helper function to calculate the remainder size
template <std::size_t MemSize, std::size_t BankSize>
constexpr std::size_t CalculateRemainder() {
return (MemSize > BankSize) ? (MemSize - BankSize) : 0;
}
// Bank1: Allocate up to MaxBankSize
template <std::size_t MemSize>
using Bank1 = std::enable_if_t<(MemSize <= MaxBankSize), std::array<uint8_t, MemSize>>;
// Bank2: Allocate from Bank1 and calculate remainder
template <std::size_t MemSize>
using Bank2 = std::conditional_t<(MemSize > MaxBankSize),
Bank1<MaxBankSize>,
Bank1<MemSize>>;
// Bank3: Allocate from Bank2 and calculate remainder
template <std::size_t MemSize>
using Bank3 = std::conditional_t<(MemSize > MaxBankSize * 2),
Bank2<MaxBankSize>,
Bank2<MemSize>>;