malloc(xx)

爆板流 2013-01-22 09:47:25
一下两个定义有何区别??
int len = 1000;
1.
unsigned char *Y_DATA;
unsigned char *YY_DATA;
unsigned char *YYY_DATA;
Y_DATA = (unsigned char *)malloc(len);
YY_DATA = (unsigned char *)malloc(len/4);
YYY_DATA = (unsigned char *)malloc(len/4);

2.
unsigned char Y_DATA[3];
Y_DATA[0] = (unsigned char *)malloc(len);
Y_DATA[1] = (unsigned char *)malloc(len/4);
Y_DATA[2] = (unsigned char *)malloc(len/4);

第二中情况,是不是相当于连续的?比如说我要使用这一组数据的时候,直接利用void *memcpy(void *dest, const void *src, size_t n);
来复制Y_DATA[]总的所有内容是不是只要:memcpy(dest,&Y_DATA[0],len*3/2)就可以了?
而第一种需要三个都cpy一次··,是吗?
...全文
110 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
BuleRiver 2013-02-26
没有任何区别。
  • 打赏
  • 举报
回复
Cody2k3 2013-01-23
引用 4 楼 carmili 的回复:
两种情况我都验证了,内存空间都是连续的。 第一种情况 Y_DATA = 19431440 YY_DATA = 19432448 YY_DATA-Y_DATA = 1008 YYY_DATA = 19432720 YYY_DATA-YY_DATA = 272 第二种情况 Y_DATA[0] = 10731536 Y_DATA[1] = 10732544……
呵呵, 这位仁兄不要这么急着下结论哈
  • 打赏
  • 举报
回复
J_King 2013-01-23
内存空间虽然是连续的,但不同平台内存的对齐放式不一样,所分配的得到空间会大于你申请的空间,直接用memcopy(),可以实现数据的复制,但使用的时候需要注意每个数据的启始地址,因为中间可能会有小间隔。
  • 打赏
  • 举报
回复
J_King 2013-01-23
两种情况我都验证了,内存空间都是连续的。 第一种情况 Y_DATA = 19431440 YY_DATA = 19432448 YY_DATA-Y_DATA = 1008 YYY_DATA = 19432720 YYY_DATA-YY_DATA = 272 第二种情况 Y_DATA[0] = 10731536 Y_DATA[1] = 10732544 Y_DATA[1]-Y_DATA[0] = 1008 Y_DATA[2] = 10732816 Y_DATA[2]-Y_DATA[1] = 272 在第二种情况下,你的代码不对,因为内存地址是32位的,不应该用unsigned char类型 应该用unsigned long ,某些平台用 unsigned int 也可以。
  • 打赏
  • 举报
回复
空的 2013-01-22
试下呗,然后core...
  • 打赏
  • 举报
回复
kickxxx 2013-01-22
没有任何区别,不能一次实现三个地址的copy
  • 打赏
  • 举报
回复
爆板流 2013-01-22
我试试看看~~~~~~~~~~···
  • 打赏
  • 举报
回复
相关推荐
发帖
UNIX文化
加入

2156

社区成员

Linux/Unix社区 UNIX文化
申请成为版主
帖子事件
创建了帖子
2013-01-22 09:47
社区公告
暂无公告