给定一个大struct
指针,比如说large_ptr
,我想把它分配给一个相同类型的全局变量,我们称之为g_large
,那么我有2个选择:
第一个使用 memcpy
:
memcpy(&g_large, large_ptr, sizeof(g_large));
第二个使用赋值:
g_large = *large_ptr;
由于我想知道的嵌入式软件中缺少内存和堆栈大小,第二种方式是否像 memcpy
一样,或者它是否创建了一个 tmp var 来执行分配?这有什么标准吗?
如果它表现得像 memcpy
那么我更喜欢它更短。但是如果它创建了一个临时变量,它可能是堆栈的问题。
您的经验和知识将不胜感激!
有几个提到我需要编译和查看程序集。 这是一个我需要学习的过程,因为它是一个交叉编译器,它生成二进制文件并且需要解析。不是一个简单的任务。我可以做到,但这需要时间。
答案 0 :(得分:-1)
我可能误解了,但在您的 memcpy 函数中,sizeof(g_large) 将始终返回 8 个字节作为结果,因为 c 中的指针大小为 8 个字节。因此,您将获得指针大小而不是结构大小。如果只有指针寻址,就好像无法找到数组的大小一样。
[编辑:哦,是的,我误解了,但无论如何仍然推荐以下部分]
我会做什么: