首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

使用 “void指针和size” 来保存数据解决思路

2012-06-01 
使用 “void指针和size” 来保存数据我想实现一个栈结构,能够保存不同数据类型的数据(类似模板)现在我想通过

使用 “void指针和size” 来保存数据
我想实现一个栈结构,能够保存不同数据类型的数据(类似模板)
现在我想通过void指针和数据类型字节数 来保存用户数据
比如:void *pArray=malloc(arrayLength * elementTypeSize);//这样pArray就指向了arrayLength个元素的数组,该数组每个元素能够保存elementType数据。

我有两个问题:
1. 使用这种方式的利弊,之前我看有用宏定义模板的,感觉不好调试。于是就想到了这种方法。另外内部拷贝数据使用的memcpy函数,是不是效率比较低?
2. 有没有个方法能够将定义这样一个指针:
  这个指针类型占用字节正好等于用户指定的elementTypeSize

[解决办法]
第二问没有看懂。对于第一问,不用担心,我看过VC中memory的实现(汇编代码),其实现非常优秀,性能很好,不用担心。
[解决办法]
如果memcpy是性能瓶颈,那你什么都别干了。


[解决办法]

C/C++ code
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函数 的效率,优化过的
[解决办法]
探讨
1. memcpy 的效率还是很高的
2. 如果elementTypeSize是个常量,那么struct {char data[elementTypeSize];} * myStruct;就是你要的size。但如果elementTypeSize只是个变量,那你就还是用char×或(uint8_t×)来做pArray吧,这样移动的时候就+elementTypeSize。

[解决办法]
第二个问题,32位机中不是所有类型指针占用字节都是4么,楼主说的是指针指向空间的大小吧,但是我还是没有明白楼主第二个问题的意思
[解决办法]
1、你要使用模拟栈,那么得需要 栈顶和栈底指针各一个
struct stack *my_stack malloc( sizeof(*my_stack) * size );
struct stack *buttom = &my_stack[size];
struct stack *top = my_statk;

2、由于你使用了不同的类型元素,所以你需要,对齐一下,占用的空间,并且记录一下,占用的大小
struct stack *node = my_stack;
int sz = (sizeof(something)+3) & (^3);
node->size=128; //字节
memcpy(node->something,something,sizeof(something));
node->next = NULL;

struct stack *priv = my_statck;
while(priv->next)
{
priv = priv->next;
}
priv->next = node;

3、你得判断,空间剩余量
[解决办法]
探讨

引用:

应该能进行加减运算,而且偏移为一个字节,也就是说void指针指向类型大小为1字节。

热点排行