标签: memcpy

strncpy和memcpy之间的区别?

我如何才能获得s[7]s

我没有发现strncpy和之间的任何区别memcpy.如果我想打印输出s,以及s[7](像qwertyA),我必须在以下代码中进行哪些更改:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char s[10] = "qwerty", str[10], str1[10];
    s[7] = 'A';
    printf("%s\n",s);
    strncpy(str,s,8);
    printf("%s\n",str);
    memcpy(str1,s,8);
    printf("%s\n",str1);
    return 0;
}
/*
O/P
qwerty
qwerty
qwerty
*/
Run Code Online (Sandbox Code Playgroud)

c memcpy strncpy

18
推荐指数
2
解决办法
3万
查看次数

优化的memcpy

在C++中有没有更快的memcpy()替代品?

c++ optimization memcpy

17
推荐指数
5
解决办法
1万
查看次数

C中的memset和memcpy有什么区别

我已经阅读了函数头文件,但我仍然不确定在用例方面究竟有什么区别.

c memset memcpy

17
推荐指数
2
解决办法
3万
查看次数

是什么让Apple的PowerPC memcpy如此之快?

为了在PowerPC上寻找一个好的内存策略,我写了几个复制函数.使用具有高速缓存提示(dcb*)的Altivec或fp寄存器可以使大数据的简单字节复制循环的性能提高一倍.最初很满意的是,我定期记忆,看看它的比较...比我最好的速度快10倍!我无意重写memcpy,但我希望从中学习并加速几个简单的图像过滤器,这些过滤器花费大部分时间将像素移入和移出内存.

Shark分析显示它们的内部循环使用dcbt预取,有4个向量读取,然后是4个向量写入.在调整了我的最佳函数以便每次迭代运行64个字节之后,memcpy的性能优势仍然令人尴尬.我正在使用dcbz来释放带宽,Apple没有使用任何东西,但两个代码都倾向于对商店犹豫不决.

prefetch
  dcbt future
  dcbt distant future
load stuff
  lvx image
  lvx image + 16
  lvx image + 32
  lvx image + 48
  image += 64
prepare to store
  dcbz filtered
  dcbz filtered + 32
store stuff
  stvxl filtered
  stvxl filtered + 16
  stvxl filtered + 32
  stvxl filtered + 48
  filtered += 64
repeat

有没有人对为什么非常相似的代码有如此戏剧性的性能差距有一些想法?我喜欢用真正的图像过滤器来腌制真正的图像过滤器!

附加信息:所有数据都是矢量对齐的.我正在制作图像的过滤副本,而不是替换原始图像.该代码在PowerPC G4,G5和Cell PPU上运行.Cell SPU版本已经非常快.

optimization powerpc memcpy shark altivec

17
推荐指数
2
解决办法
4248
查看次数

memcpy()通常比strcpy()快吗?

memcpy()通常速度比strcpy()(上最真实的平台)?(我假设字符串的大小是已知的.)

如果我正确地记得i386汇编程序,则会有loop指令复制给定数量的字节或单词.所以它是最快的方式,而strcpy()i386汇编程序实现将'\0'在一个简单的循环中使用手动检查.

所以我觉得在x86上memcpy()要快于strcpy().

其他架构是什么?

c performance x86 memcpy strcpy

17
推荐指数
2
解决办法
1万
查看次数

当memcpy()比memmove()更快时,真正的重要案例是什么?

memcpy()和源之间的关键区别memmove()是,memmove()当源和目标重叠时,它将正常工作.当缓冲区肯定不重叠时,memcpy()更可取,因为它可能更快.

困扰我的是这个潜在的.它是一种微观优化还是存在真正重要的例子,当memcpy()我们真的需要使用memcpy()而不是坚持memmove()到处时?

c c++ memory memcpy memmove

16
推荐指数
2
解决办法
4144
查看次数

Go-复制结构体之间的所有常用字段

我有一个存储JSON的数据库,以及一个提供外部API的服务器,通过HTTP帖子,可以更改此数据库中的值.数据库由内部的不同进程使用,因此具有共同的命名方案.

客户看到的密钥是不同的,但是使用数据库中的密钥(有未公开的密钥)将1:1映射.例如:

这是在数据库中:

{ "bit_size": 8, "secret_key": false }
Run Code Online (Sandbox Code Playgroud)

这是呈现给客户:

{ "num_bits": 8 }
Run Code Online (Sandbox Code Playgroud)

API可以根据字段名称进行更改,但数据库始终具有一致的键.

我在结构中将字段命名为相同,并为json编码器指定了不同的标志:

type DB struct {
    NumBits int  `json:"bit_size"`
    Secret  bool `json:"secret_key"`
}
type User struct {
    NumBits int `json:"num_bits"`
}
Run Code Online (Sandbox Code Playgroud)

我正在使用encoding/jsonMarshal/Unmarshal.

reflect是正确的工具吗?是否有更简单的方法,因为所有键都相同?我在想某种memcpy(如果我保持用户字段的顺序相同).

reflection json go memcpy

16
推荐指数
3
解决办法
1万
查看次数

当__builtin_memcpy被libc的memcpy替换时

memcpyGCC中有一个C99/posix 函数版本:__builtin_memcpy.

有时它可以被GCC替换为内联版本的memcpy,在其他情况下,它被替换为调用libc的memcpy.例如,这里注意到:

最后,在编译器注释中,__ builtin_memcpy可以回退到发出memcpy函数调用.

这个选择的逻辑是什么?在其他gcc兼容的编译器中逻辑是否相同,如clang/llvm,intel c ++编译器,PCC,suncc(oracle studio)?

当我更喜欢使用__builtin_memcpy而不是简单的memcpy?

gcc c99 built-in memcpy

16
推荐指数
1
解决办法
1万
查看次数

Memcpy()在安全编程中?

我最近偶然发现了一篇声称微软memcpy()在其安全编程商店禁止该功能的文章.我理解该功能固有的漏洞,但是有必要完全禁止它的使用吗?

我写的程序是应该memcpy()完全避免,还是只是确保它安全使用?有哪些替代品可以提供类似但更安全的功能?

c security memcpy

15
推荐指数
4
解决办法
3万
查看次数

MSVC:无效的 memcpy 优化?

考虑以下代码:

void MemMove8(void* dst, void* src)
{
    char tmp[8];
    memcpy(tmp, src, 8);
    memcpy(dst, tmp, 8);
}
Run Code Online (Sandbox Code Playgroud)

MSVC (16.7.1) x86 with /O2 为此函数生成以下程序集:

; _dst$ = ecx
; _src$ = edx
    mov eax, DWORD PTR [edx]
    mov DWORD PTR [ecx], eax
    mov eax, DWORD PTR [edx+4]
    mov DWORD PTR [ecx+4], eax
Run Code Online (Sandbox Code Playgroud)

但如果输入和输出缓冲区重叠,这将不起作用(在某些情况下)。

生成的代码对我来说似乎是错误的;或者这是一个有效的转换,我在这里遗漏了什么?

c++ x86 memcpy visual-c++ compiler-bug

15
推荐指数
1
解决办法
369
查看次数