局部变量,有必要用内存池吗?

changsn 2012-06-14 12:06:47
就是在过程内部,需要大量用到 char数组。buffer:array[0..20480]of char;

这样有必要用内存池吗?
...全文
203 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
changsn 2012-06-14
  • 打赏
  • 举报
回复
可以说详细点吗?是做为Socket缓存
[Quote=引用 6 楼 的回复:]

如果这个过程被调用得非常频繁,比如socket的数据接收缓存,那么每次重新分配和释放内存是不合适的,你可以弄一个全局的内存区,就如你定义的那样。
[/Quote]
「已注销」 2012-06-14
  • 打赏
  • 举报
回复
如果这个过程被调用得非常频繁,比如socket的数据接收缓存,那么每次重新分配和释放内存是不合适的,你可以弄一个全局的内存区,就如你定义的那样。

武稀松 2012-06-14
  • 打赏
  • 举报
回复
除非像线程这样一直在函数里面跑循环的局部变量.否则局部变量离开函数就自动释放了.怎么搞内存池.
mhhaifeng 2012-06-14
  • 打赏
  • 举报
回复
什么是内存池?
过程内部 自已申请的内存,自己释放

你说的buffer:array[0..20480]of char; 不是你自己申请的,不用管
但这个 buffer 最好不要太大
kaikai_kk 2012-06-14
  • 打赏
  • 举报
回复
沒必要。。。
bdmh 2012-06-14
  • 打赏
  • 举报
回复
buffer是共用的吗,如果共用,声明为全局的
Oraclers 2012-06-14
  • 打赏
  • 举报
回复
Delphi 的數組是生存期自管理的,本人覺得沒必要再去另外管理。
zwjchina 2012-06-14
  • 打赏
  • 举报
回复
"就是在过程内部,需要大量用到 char数组。buffer:array[0..20480]of char;

这样有必要用内存池吗?"

我的理解是:要看情况
过程内,使用局部变量,实际是在栈上分配内存.而通常Delphi默认的栈的最大大小是1M
如果,局部变量使用栈上的内存过大,有可能导致程序栈溢出. 这时,可以考虑使用内存池.
当然,另一个解决办法是在编译选项中扩大栈的大小.
haitao 2012-06-14
  • 打赏
  • 举报
回复
服务端程序,可能需要
客户端,一般不需要
「已注销」 2012-06-14
  • 打赏
  • 举报
回复
再细一点,就是分配好缓存以后,将他的地址传入你的的socket接收函数。这个没法再细了。winsock有不同的io模式,不同的io模式下处理方式是不同的。
[Quote=引用 7 楼 的回复:]

可以说详细点吗?是做为Socket缓存
引用 6 楼 的回复:

如果这个过程被调用得非常频繁,比如socket的数据接收缓存,那么每次重新分配和释放内存是不合适的,你可以弄一个全局的内存区,就如你定义的那样。
[/Quote]

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧