如何基于模板值条件式声明分属不同内存Bank的数组?
编译阶段多Bank内存分配实现问题
编译阶段需通过声明最多3个独立数组分配内存,每个数组分别对应3个等容量且物理不相邻的内存Bank。分配规则如下:
- 从第一个Bank开始,优先按该Bank的最大容量分配
- 剩余内存需求依次分配到下一个Bank
- 无需分配的Bank,不声明对应数组
- 若内存需求超出3个Bank的总容量,编译直接报错
举个例子:假设需分配2.5K内存,单个Bank最大容量为1K,则分配方式为:
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>>;
内容的提问来源于stack exchange,提问作者ATL_DEV
相关产品推荐
相关产品推荐

