打印

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

[复制链接]
1687|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuiyu|  楼主 | 2008-1-14 17:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请知道的高手指点一下:

在一个项目中,有中文编辑功能,类似手机中的短信,在输入一段文字后,内容暂存在内存中的,如果此时我要在这些数据的中间增加内容,那么插入的数据需要将之前的数据先备份,然后再插入增加的数据,最后把备份的数据连接到插入的数据后面.

问题是这样操作,如果文件大的话,那CPU的资源就大部分花在了内存复制上了,操作的效率就太低了,我想问问初了这中操作方式外还有没有其它高效率的方式呢?

用链表指针我也想过,但是一个字就2个字节,那每个字分配2个指针那样内存也很浪费,而且操作效率也不见得就高,不知道计算机上记事本是怎么操作?请大家指点一下

相关帖子

沙发
mohanwei| | 2008-1-15 08:42 | 只看该作者

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

使用特权

评论回复
板凳
xwj| | 2008-1-15 08:55 | 只看该作者

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

不过内存速度太快,一般都是不用考虑这个问题的 


而且肯定不是一个字分配一个链表项的,这样做的话就每一点意义了,只会更慢

使用特权

评论回复
地板
aweyfan| | 2008-1-15 09:17 | 只看该作者

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

请参考流行gui 的editbox控件源码

使用特权

评论回复
5
dld2| | 2008-1-15 09:27 | 只看该作者

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

不过还没整明白。

使用特权

评论回复
6
xwj| | 2008-1-15 09:32 | 只看该作者

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

稍微小一点就肯定是用memcpy了
毕竟内存速度还是很快的,不是足够大的数据时memcpy也是很快的事,因此链表的设置要综合考虑,每个表项的尺寸也不能太小

LZ说的"那每个字分配2个指针那样" 绝对是错的不能再错的了


其实,保护模式下的内存就是虚拟映射的链表,而且是跨介质的(跨越物理内存和硬盘文件系统)
但是编程者可以完全不用去管它

使用特权

评论回复
7
农民讲习所| | 2008-1-15 09:34 | 只看该作者

memmove、memcpy

对内存块(文本块)操作,不是对记录(索引)操作。

使用特权

评论回复
8
zhuiyu|  楼主 | 2008-1-15 16:47 | 只看该作者

谢谢大家的回答

今天有点忙,才上来!

根据大家的意见,我还是采用MEMCPY了,谢谢!后面有新体会再来和大家一起讨论~

使用特权

评论回复
9
xb007| | 2008-3-28 19:07 | 只看该作者

链表

使用链表操作呀!数据结构中很经典的操作!

使用特权

评论回复
10
后学| | 2008-3-29 07:46 | 只看该作者

re

参考下文本编辑器的设计,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

0

粉丝