内存操作的一个问题,请高手指点,谢谢!

[复制链接]
 楼主| zhuiyu 发表于 2008-1-14 17:39 | 显示全部楼层 |阅读模式
请知道的高手指点一下:<br /><br />在一个项目中,有中文编辑功能,类似手机中的短信,在输入一段文字后,内容暂存在内存中的,如果此时我要在这些数据的中间增加内容,那么插入的数据需要将之前的数据先备份,然后再插入增加的数据,最后把备份的数据连接到插入的数据后面.<br /><br />问题是这样操作,如果文件大的话,那CPU的资源就大部分花在了内存复制上了,操作的效率就太低了,我想问问初了这中操作方式外还有没有其它高效率的方式呢?<br /><br />用链表指针我也想过,但是一个字就2个字节,那每个字分配2个指针那样内存也很浪费,而且操作效率也不见得就高,不知道计算机上记事本是怎么操作?请大家指点一下
mohanwei 发表于 2008-1-15 08:42 | 显示全部楼层

链表……经典的数据结构之一

  
xwj 发表于 2008-1-15 08:55 | 显示全部楼层

是啊,太大的话就用分页,用链表了

不过内存速度太快,一般都是不用考虑这个问题的&nbsp;<br /><br /><br />而且肯定不是一个字分配一个链表项的,这样做的话就每一点意义了,只会更慢
aweyfan 发表于 2008-1-15 09:17 | 显示全部楼层

不能用链表,还是用最笨的memcpy

请参考流行gui&nbsp;的editbox控件源码
dld2 发表于 2008-1-15 09:27 | 显示全部楼层

貌似有一种叫“块状链表”的东东

不过还没整明白。
xwj 发表于 2008-1-15 09:32 | 显示全部楼层

太大(比如超过几十M或上G)时才考虑链表

稍微小一点就肯定是用memcpy了<br />毕竟内存速度还是很快的,不是足够大的数据时memcpy也是很快的事,因此链表的设置要综合考虑,每个表项的尺寸也不能太小<br /><br />LZ说的&quot;那每个字分配2个指针那样&quot;&nbsp;绝对是错的不能再错的了<br /><br /><br />其实,保护模式下的内存就是虚拟映射的链表,而且是跨介质的(跨越物理内存和硬盘文件系统)<br />但是编程者可以完全不用去管它<br /><br />
农民讲习所 发表于 2008-1-15 09:34 | 显示全部楼层

memmove、memcpy

对内存块(文本块)操作,不是对记录(索引)操作。
 楼主| zhuiyu 发表于 2008-1-15 16:47 | 显示全部楼层

谢谢大家的回答

今天有点忙,才上来!<br /><br />根据大家的意见,我还是采用MEMCPY了,谢谢!后面有新体会再来和大家一起讨论~
xb007 发表于 2008-3-28 19:07 | 显示全部楼层

链表

使用链表操作呀!数据结构中很经典的操作!
后学 发表于 2008-3-29 07:46 | 显示全部楼层

re

参考下文本编辑器的设计,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部