社区
C语言
帖子详情
memcpy(currupt, currupt, 5);为什么可以通过
yo-yo
2010-05-17 06:33:58
memcpy的前两个参数声明为restrict,为什么还可以传入相同的指针?
...全文
136
10
打赏
收藏
memcpy(currupt, currupt, 5);为什么可以通过
memcpy的前两个参数声明为restrict,为什么还可以传入相同的指针?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangweiit
2010-05-18
打赏
举报
回复
官方上,只是说,会有不确定的结果
但是,我之前也试过,至少,在MS的编译器下,结果还是确定的,就是通过编译,而且复制正常
在vs中,memcpy与memmove效果一样,就算是有重叠的时候
localxiao
2010-05-18
打赏
举报
回复
这2个关键字只是告诉编译器可以这样做,并没有要求编译器检查这段内存真实情况是否是这样的
localxiao
2010-05-18
打赏
举报
回复
restrict 仅限于指针使用,是一个用于编译器优化的关键字
他告诉编译器,这段内存只能由他一个人访问
所以编译器不用每次都去内存中取值,只要在寄存器中取值就可以了
比如
int *p = malloc(sizeof(int) * 10);
p[0] = 0;
p[0] += 5;
比如当前寄存器%eax存放的是p[0],那么编译器可以放心的做如下的优化
addl 5, %eax
而不需要先取p[0]对应地址中的值,再做加法
可以参考关键字volatile
这个关键字的作用刚好相反,告诉编译器,每次都必须从内存中读取
zrcvic
2010-05-17
打赏
举报
回复
因为restrict关键字本身和inline关键字一样,没有任何实际意义,完全可以将它们当成空白。
附:本题结果未定义。
「已注销」
2010-05-17
打赏
举报
回复
声明多个唯一的也行的,意思就是加个范围,便于代码的优化。
编译以后做的事儿都一样。
wibnmo
2010-05-17
打赏
举报
回复
学习。。
yo-yo
2010-05-17
打赏
举报
回复
C的[C99]
声明应该是这样的:void * memcpy( void * restrict destination, void * restrict source, size_t num );
z569362161
2010-05-17
打赏
举报
回复
void *memcpy(void *dest, void *src, unsigned int count);
:由src所指内存区域复制count个字节到dest所指内存区域。
pengzhixi
2010-05-17
打赏
举报
回复
是可以同一个指针,但是像你这个内存折叠的你会发现你运行后里面很多东西有可能不是原来的了。
bencharluo
2010-05-17
打赏
举报
回复
什么意思?没看懂
c++ references上面的声明:
void * memcpy ( void * destination, const void * source, size_t num );
C语言
memcpy
和
memcpy
_s区别 - C语言零基础入门教程
目录 一.
memcpy
和
memcpy
_s 函数区别 1.语法对比
memcpy
_s 函数语法
memcpy
函数语法 2.
memcpy
和
memcpy
_s 相同点 3.
memcpy
和
memcpy
_s 不同点 1.
memcpy
函数报错:error C4996 2.
memcpy
函数没有方法来保证有效的缓冲区尺寸,使用不安全 三.
memcpy
和
memcpy
_s 函数实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基
memcpy
vs
memcpy
_toio
环境:Linux kernel 5.15.78 aarch64 armv8现象:使用vmap()以nocache的形式映射一段物理地址,使用
memcpy
()往其中写入数据,在写入最后64字节时发生如下错误确认并未发生溢出,且使用
memcpy
_toio()或以cache形式映射则不会有这个问题。网上搜了一圈没发现很好的解释,遂read the fxxking source code,趁热记录下来。本文主要探讨两个问题:1.
memcpy
()及
memcpy
_toio()的差别;
为什么
memcpy
_s比
memcpy
安全
void*
memcpy
( void *dest, const void *src, size_t count ); (until C99) void*
memcpy
( void *restrict dest, const void *restrict src, size_t count ); (since C99) errno_t
memcpy
memcpy
函数
原理
memcpy
函数是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring)。其原型是: void *
memcpy
(void *destin, void *source, unsigned n); 作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。 函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。 使用
memcpy
函数时,需要注意: 数据长度(第三个参数)的单位是字节(1byte
【C库函数】
memcpy
函数详解
memcpy
函数,拷贝内容到目标空间。 比strncpy更加强大的函数
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章