【发布时间】:2013-12-11 10:06:48
【问题描述】:
在 C 中,我可以像这样定义一个指向数组的指针:
char b1[SOME_SIZE];
char (*b3)[3]=(char(*)[3])b1;
这样b3[i][j] == b1[i*3+j]。
我可以在unsafe C# 中声明这样的指针b3 吗?
我的意图是访问位图通道:
///...
unsafe {
//...
byte *target; //8bpp
byte (*source)[3]; //24bpp
//...
target[x]=(source[x][0]+source[x][1]+source[x][2])/3;
//...
我希望这样,使用source[x][ch]而不是source[x*3+ch]来获得一些编译器优化。
【问题讨论】:
-
基于希望的优化真的没有任何意义。您可以创建一个指针
byte*[],但这可能不是您想要的 - look in the docs。 -
@BartoszKP 也许你是对的,我可能过度优化了!我的观点是,在 C/C++ 中,良好的声明通常会针对繁重的代码提供更好的性能(和易读性),因为编译器可以优化前者但不能优化后者。
-
在 C# 中,this 是在性能方面使用位图的推荐方式。
-
我知道,但我正在尝试使用指向数组的指针来获得更清晰的代码。
-
在您的问题中,您说您想要“获得一些编译器优化”,而不是“获得更清晰的代码”。下定决心,你不能两者兼得。