我需要根据以下内容创建快速的4D查找表: 1-它将接收4个输入变量(u,v,i,j),每个变量的范围从0到15。2-查找表返回一个8位的预计算值如何在C语言中用非常快的代码实现这个4D查找表
发布于 2013-06-13 17:04:43
只需在堆栈上创建一个4维数组。在大多数平台上,16^4字节的大小应该适合堆栈,否则应设置为静态或全局大小。它给了编译器关于布局的充分知识,它是一种众所周知的常用语言构造,它应该优化好:
uint8_t lookup[16][16][16][16]; // global table about 64KB
int main(int, char **)
{
...当然,您可以将一维数组设置为uint8_t lookup[16*16*16*16],然后将值相乘为lookup[u*16*16*16 + v*16*16 + i*16 + j],但我非常怀疑您是否能够使这种方法比四维数组更有性能(在四维数组中,编译器会在内部执行这种乘法)。
由于您正在询问有关初始化的问题,下面是一个如何初始化一个4维数组的示例。为了简单起见,它只是[4][4][4][4],所以您必须将其增加到16 (16行的16块,16系列的16个数字。
uint8_t test[4][4][4][4]= {
{ // [0][x][y][z]
{ 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 },
{ 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 },
{ 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 },
{ 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 } },
{ // [1][x][y][z]
{ 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 },
{ 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 },
{ 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 },
{ 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 } },
{ // [2][x][y][z]
{ 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 },
{ 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 },
{ 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 },
{ 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 }, { 3, 3, 3, 3 } },
{ // [3][x][y][z]
{ 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 },
{ 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 },
{ 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 },
{ 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 }, { 4, 4, 4, 4 } }
};https://stackoverflow.com/questions/17083089
复制相似问题