memcpy 适用于结构中的大型数组吗?
我有一个结构,里面有一个动态数组。我已经定义了其中两个结构。
我在第一个结构中填充数组,然后使用像
memcpy(R->v, A->v, A->n*sizeof(double) 这样的
行,其中 v 是已动态分配的数组,并且n 是条目的数量,
如果重要的话,
问题是,这些值没有被正确复制到 R 中。知道为什么吗?称为“very_huge_loop”,但没有异常或任何异常,
该数组的长度约为 188k 双倍,
谢谢。
I have a structure that has a dynamic array in it. I have defined two of these structures.
I fill the array in the first structure, then use a line like
memcpy(R->v, A->v, A->n*sizeof(double)
where v is the array that has been dynamically allocated, and n is the number of entries.
R and A are the same type if that matters.
The problem is, the values are not being properyl copied into R. Any idea why? When I try to debug this in totalview, memcpy goes into a function called "very_huge_loop", but no exception or anything is thrown.
the array is approx 188k doubles in length.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可能是内存对齐。某些体系结构不喜欢像
double
这样的多字节值从任意字节地址开始。分配数组内存时,您可能需要使用诸如memalign()
之类的函数,而不是malloc()
。如果您使用的是new double[n]
,那么它应该已经正确对齐。It could be memory alignment. Some architectures do not like multi-byte values like
double
to start on any arbitrary byte address. When you allocate the array memory, you might want to use a function likememalign()
instead ofmalloc()
. If you are usingnew double[n]
then it should already be aligned correctly.