在dll

时间:2015-12-25 22:59:22

标签: c arrays winapi optimization dll

我是一个数组/ 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指针本身,第二个 指向它的指针(?)

如果是这样可悲,因为需要依赖?有人对此有更多了解并可以解释一下吗?

1 个答案:

答案 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表示0UCHAR_MAX之间的字节值,或使用signed char表示CHAR_MIN之间的值1}}和CHAR_MAX。为清晰起见,您还可以使用int8_tuint8_t。为C字符串保留类型char