C memmove是否为其临时数组使用动态内存

C memmove是否为其临时数组使用动态内存,c,memory,C,Memory,根据: 7.24.2.2“memmove的memmove功能”: memmove函数将n字符从s2指向的对象复制到s1指向的对象中复制发生时,就像将s2指向的对象中的n字符首先复制到一个由n字符组成的临时数组中,该数组不会与s1和s2指向的对象重叠,然后将临时数组中的n字符复制到s1 因此,如果我选择使用(file_size=32K)移动大小为32K的缓冲区 临时缓冲区的大小不是32K吗 问题 程序能否自行分配动态内存?它是否分配并释放了那一行中的内存?我想你错过了那句话中的“好像”。这意味着效

根据:

7.24.2.2“memmove的
memmove
功能”:

memmove
函数将
n
字符从
s2
指向的对象复制到
s1
指向的对象中复制发生时,就像将
s2
指向的对象中的
n
字符首先复制到一个由
n
字符组成的临时数组中,该数组不会与
s1
s2
指向的对象重叠,然后将临时数组中的
n
字符复制到
s1

因此,如果我选择使用(file_size=32K)移动大小为32K的缓冲区

临时缓冲区的大小不是32K吗

问题


程序能否自行分配动态内存?它是否分配并释放了那一行中的内存?

我想你错过了那句话中的“好像”。这意味着效果将与它那样做时一样,而不是它实际上会那样做。我从未见过真正使用临时数组的
memmove
实现。

在现代编译器中
memmove
不是一个单一的实现;相反,它被认为是内在的。用一个例子最容易说明“仿佛”是如何工作的:


由于编译器能够考虑
限制
,并“证明”这两个函数指向的内存区域不重叠,因此对
memmove
的调用立即更改为对
memcpy
的(尾部)调用

多谢各位。发现了指向一些实现的其他问题。还有,为Ripple干杯!尝试,阅读glibc源代码,阅读GCC源代码,逐步调试程序集,并祈祷它不要走得太深:-)@CiroSantilli新疆改造中心六四事件法轮功 这是针对嵌入式应用程序的(这就是为什么我太担心内存),但肯定会尝试
ltrace
memmove(io_Buffer, io_Buffer+17, file_size);
#include <string.h>

void test_memmove(void * restrict dst, const void * restrict src, size_t n) {
    memmove(dst, src, n);
}
test_memmove:
        jmp     memcpy