我是一个数组/ ram缓冲区
char* bitmap_bufer;
int bitmap_buffer_size_x;
int bitmap_buffer_size_y;
bitmap_buffer是mallocked(并且经常被重新分配到不同的地方 尺寸也是如此),访问内容的效率绝对是重要的,因为我用它作为各种光栅化/每像素绘图程序的目标
bitmap_bufer [bitmap_buffer_size_x * y + x] = color; //等
问题是我是否将其移至dll并将其导入另一个模块
__declspec(dllimport) char* bitmap_bufer;
__declspec(dllimport) int bitmap_buffer_size_x;
__declspec(dllimport) int bitmap_buffer_size_y;
将通过
进行读/写访问bitmap_bufer[bitmap_buffer_size_x*y + x]
会慢吗?我怀疑它可能有点慢 (可能通过两个指针而不是一个),但我不确定
一个是bitmap_buffer指针本身,第二个 指向它的指针(?)
如果是这样可悲,因为需要依赖?有人对此有更多了解并可以解释一下吗?
答案 0 :(得分:3)
访问动态库中分配的数据并不慢,事实上,malloc
本身位于动态库中。
通过全局变量访问数组可能效率低下,即使它位于过程数据段中。将指针和大小存储到局部变量中并以这种方式访问数组:
char *bitmap = bitmap_bufer;
int pitch = bitmap_buffer_size_x;
int height = bitmap_buffer_size_y;
bitmap[y * span + x] = 0;
...
如果以行方式访问像素,请使用指向位图行的指针:
char *row = bitmap + y * span;
for (int x = 0; x < width; x++) {
row[x] = 1;
}
也不要将char
用于像素值,使用unsigned char
表示0
和UCHAR_MAX
之间的字节值,或使用signed char
表示CHAR_MIN
之间的值1}}和CHAR_MAX
。为清晰起见,您还可以使用int8_t
和uint8_t
。为C字符串保留类型char
。