使用 “void指针和size” 来保存数据
我想实现一个栈结构,能够保存不同数据类型的数据(类似模板)
现在我想通过void指针和数据类型字节数 来保存用户数据
比如:void *pArray=malloc(arrayLength * elementTypeSize);//这样pArray就指向了arrayLength个元素的数组,该数组每个元素能够保存elementType数据。
我有两个问题:
1. 使用这种方式的利弊,之前我看有用宏定义模板的,感觉不好调试。于是就想到了这种方法。另外内部拷贝数据使用的memcpy函数,是不是效率比较低?
2. 有没有个方法能够将定义这样一个指针:
这个指针类型占用字节正好等于用户指定的elementTypeSize
[解决办法]
第二问没有看懂。对于第一问,不用担心,我看过VC中memory的实现(汇编代码),其实现非常优秀,性能很好,不用担心。
[解决办法]
如果memcpy是性能瓶颈,那你什么都别干了。
[解决办法]
init a pointer list:void* *ptr_list = NULL;int size = 0;to append a new elem into ptr_list:void* *ptr_list = (void**)realloc(ptr_list, (size + 1) * sizeof(void*));ptr_list[size] = (void*)ptr_your_object;++ size;
[解决办法]
1. memcpy 的效率还是很高的
2. 如果elementTypeSize是个常量,那么struct {char data[elementTypeSize];} * myStruct;就是你要的size。但如果elementTypeSize只是个变量,那你就还是用char×或(uint8_t×)来做pArray吧,这样移动的时候就+elementTypeSize。
[解决办法]
lz 不必担心 memcpy函数 的效率,优化过的
[解决办法]