- 主题:最佳memcpy实现
老鱼,戴夫设备是啥
【 在 hgoldfish 的大作中提到: 】
: 这个不可能是最佳实现。。在现代处理器上面,单字节访问非常慢。
: 你发的这种实现无非是朴素实现的简单推广:
: 1. 没考虑内存地址对齐
: ...................
--
FROM 121.69.39.*
在那个lib库看过这个代码
--
FROM 61.144.209.*
不谈体系结构,就没有最佳。哈哈哈。
【 在 octavo 的大作中提到: 】
: [upload=1][/upload]
--
FROM 117.136.87.*
扯淡呢,当年看windows的memcpy的源码实现,汇编的
源地址目标地址,是否4字节,8字节,16字节,128字节
是否能用sse2
自己写,确实不一定写出来,但说不考虑,搞笑呢。(BTW,我是二本毕业的,你这10多年遇到的都是哪些假货么)
【 在 wushu 的大作中提到: 】
: 这实现已经相当好了,版上绝大部分人应该是写不出来的,不知道上面说不好的仔细看过没。跟汇编比除了没法用SSE,该做的优化都做到了。
: 1. 4字节拷贝。没按8字节优化可能是追求代码简洁。
: 2. dest的4字节对齐。
: ...................
--
FROM 223.72.104.*
汇编,给上百种架构各写一个么?你准备怎么使用寄存器保证不和caller的冲突?楼主的代码从8位机到64位机哪个架构的C编译器不支持、寄存器使用不优化到最好?
你也不要说大话,不如你的都是假货,talk总是cheap。我面过不少能把前三条考虑全的,但是就无法做到结构清晰,更别提美观了。把各种情况在脑子里考虑到并构思好,没有冗余结构,并不容易。
【 在 lushan5436 的大作中提到: 】
: 扯淡呢,当年看windows的memcpy的源码实现,汇编的
: 源地址目标地址,是否4字节,8字节,16字节,128字节
: 是否能用sse2
: ...................
--
FROM 106.39.149.*
如果你没有钻石过编译器,你怎么知道你的实现在各个编译器编译出来是最佳的?
【 在 leslin (我心有约) 的大作中提到: 】
: 标 题: Re: 最佳memcpy实现
: 发信站: 水木社区 (Thu Jul 30 09:32:53 2020), 站内
:
:
: 【 在 here080 的大作中提到: 】
: : 这个为啥需要自己实现?你是写编译器的?
: :
:
: 写编译器的不做这个
: 写运行库的才需要
:
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 111.206.145.*]
--
FROM 76.126.252.*
以前做dsp会用汇编做优化,但是平台不确定的话,还是这个实现比较nice。
【 在 wushu 的大作中提到: 】
: 汇编,给上百种架构各写一个么?你准备怎么使用寄存器保证不和caller的冲突?楼主的代码从8位机到64位机哪个架构的C编译器不支持、寄存器使用不优化到最好?
: 你也不要说大话,不如你的都是假货,talk总是cheap。我面过不少能把前三条考虑全的,但是就无法做到结构清晰,更别提美观了。把各种情况在脑子里考虑到并构思好,没有冗余结构,并不容易。
--
FROM 115.33.182.*
ARM指令,字节不对齐,转int会报错,你不考虑?
就算是X86,windows的实现(比早年linux实现好多了)也考虑比这多,不信你调试时去看汇编。
没有说不如我:我说的是,如果写C程序,怎么不可能考虑字节对齐的问题?怎么可能还不知道sse2加速?
不知道这个,不是水货么?你要是说写java,Python,那你这样面试不是故意刁难么?
【 在 wushu 的大作中提到: 】
: 汇编,给上百种架构各写一个么?你准备怎么使用寄存器保证不和caller的冲突?楼主的代码从8位机到64位机哪个架构的C编译器不支持、寄存器使用不优化到最好?
: 你也不要说大话,不如你的都是假货,talk总是cheap。我面过不少能把前三条考虑全的,但是就无法做到结构清晰,更别提美观了。把各种情况在脑子里考虑到并构思好,没有冗余结构,并不容易。
--
FROM 223.72.104.*
嗯,达到了我高一时候的水平
【 在 wushu 的大作中提到: 】
: 这实现已经相当好了,版上绝大部分人应该是写不出来的,不知道上面说不好的仔细看过没。跟汇编比除了没法用SSE,该做的优化都做到了。
: 1. 4字节拷贝。没按8字节优化可能是追求代码简洁。
: 2. dest的4字节对齐。
: ...................
--
FROM 49.78.99.*
x86汇编是domain knowledge。面试时用这种题去测试,只能测出一个人是否知道这些知识,无法准确衡量他解决问题的能力。这虽然满足了面试官自身的优越感,却大概率错失合适的人才,还浪费双方时间。我觉得并不值得推荐。
你说的和汇编比除了无法用SSE,这句是不对的。主流编译器通过intrinsic函数把几乎所有SIMD指令都提供给C/C++用户了,你可以自己确认一下。不要低估本版深度。
【 在 wushu (武术) 的大作中提到: 】
: 这实现已经相当好了,版上绝大部分人应该是写不出来的,不知道上面说不好的仔细看过没。跟汇编比除了没法用SSE,该做的优化都做到了。
: 1. 4字节拷贝。没按8字节优化可能是追求代码简洁。
: 2. dest的4字节对齐。
: 3. 主循环内4条指令超标量同时拷贝32字节,一般处理器也够了。
: 4. 纯C,可移植性好,而且写的简洁美观。
: ps,我面试时coding基本必问memset或memcpy,十几年目前没遇到过能考虑到超过三条的人。
--
FROM 114.84.111.*