|
Boost Users : |
From: Frank Maddin (frankmad_at_[hidden])
Date: 2004-12-17 18:42:13
> -----Original Message-----
> From: boost-users-bounces_at_[hidden] [mailto:boost-users-
> bounces_at_[hidden]] On Behalf Of Beman Dawes
> Sent: Thursday, December 16, 2004 4:19 PM
> To: boost-users_at_[hidden]; boost-users_at_[hidden]
> Subject: Re: [Boost-users] boost and memory allocations (signals and
> others)
>
> At 09:17 AM 12/15/2004, Caleb Epstein wrote:
> >On Mon, 13 Dec 2004 09:01:01 -0800, Frank Maddin
> <frankmad_at_[hidden]>
>
> >wrote:
> >
> >> We've been thinking about using certain boost functionality on a
> project.
> >
> >> We were trying to keep the number of allocations down.
> >
> >See the attached test program which makes the Hello class "noisy"
and
> >runs two different versions of your signals test. One uses object
> >copy semantics and the other uses reference semantics. Compare the
> >output:
> >
> >copy test:
> >Hello::Hello () @ 0xbfffb950
> >Hello::Hello (const ref) @ 0xbfffb8c0
> >Hello::Hello (const ref) @ 0xbfffb870
> >Hello::Hello (const ref) @ 0xbfffb830
> >Hello::Hello (const ref) @ 0xbfffb7e0
> >Hello::Hello (const ref) @ 0x8050fb0
> >Hello::~Hello @ 0xbfffb7e0
> >Hello::~Hello @ 0xbfffb830
> >Hello::~Hello @ 0xbfffb870
> >Hello::~Hello @ 0xbfffb8c0
> >Hello::Hello (const ref) @ 0x8050fc0
> >Hello::Hello (const ref) @ 0x8050fc8
> >Hello::Hello (const ref) @ 0x8050fd0
> >Hello::~Hello @ 0x8050fc8
> >Hello::~Hello @ 0x8050fc0
> >Hello::~Hello @ 0x8050fb0
> >i = 1968
> >Hello::~Hello @ 0x8050fd0
> >Hello::~Hello @ 0xbfffb950
> >
> >ref test:
> >Hello::Hello () @ 0xbfffb950
> >i = 1968
> >Hello::~Hello @ 0xbfffb950
>
> Wow! That is a pretty substantial difference.
>
> Seems like the signals docs should make a point of explaining the
> efficiency gained by using ref. Or maybe they do, but I didn't find
> anything in several minutes of poking around the docs. There is no
table
> of
> contents entry like "Efficiency considerations" or similar.
>
> --Beman
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
Thanks, that did indeed remove some churn. As Mr. Dawes pointed out, it
would be nice to have that info in the docs somewhere.
Overall though, I'm not sure that the allocations I'm seeing are
acceptable for my application. Ideally, I'd like 1 allocation on
connect and 0 allocations on signal send. We will be using an optimized
small block allocator, but we still want to reduce memory operations as
much as possible. Is there any suggestion to reduce this?
I ran my own test putting in _CrtSetAllocHook(MyAllocHook), just copied
from msdn. Below are the results (cleaned up a bit for just alloc hook
calls).
I haven't really looked at memory pools too closely. Would they be
useful in any sort of situation with signals?
>From the pool docs:
>Pools are generally used when there is a lot of allocation and
de-allocation of small objects. Another common usage
>is the situation above, where many objects may be dropped out of
memory.
Thanks,
Frank
ref test
before declaration:
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 93)
Memory operation in (null), line 0: allocating a 40-byte 'Normal' block
(# 95)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 96)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 97)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 3240f8
Memory operation in (null), line 0: allocating a 40-byte 'Normal' block
(# 98)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 99)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 321688
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 100)
after declaration:
before connect:
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 101)
Memory operation in (null), line 0: allocating a 20-byte 'Normal' block
(# 102)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 103)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 104)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 105)
Memory operation in (null), line 0: allocating a 20-byte 'Normal' block
(# 106)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 107)
Memory operation in (null), line 0: allocating a 4-byte 'Normal' block
(# 108)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 109)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 110)
Memory operation in (null), line 0: allocating a 40-byte 'Normal' block
(# 111)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 112)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0)
at 3244e0Memory operation in (null), line 0: freeing a 0-byte 'Normal'
block (# 0)
at 324490Memory operation in (null), line 0: freeing a 0-byte 'Normal'
block (# 0)
at 324340Memory operation in (null), line 0: freeing a 0-byte 'Normal'
block (# 0)
at 321688Memory operation in (null), line 0: freeing a 0-byte 'Normal'
block (# 0)
at 324290Memory operation in (null), line 0: freeing a 0-byte 'Normal'
block (# 0)
at 3242e8
after connect:
before sig send:
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 113)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 114)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 321688
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 324490
after sig send:
copy test:
before declaration:
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 67)
Memory operation in (null), line 0: allocating a 40-byte 'Normal' block
(# 69)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 70)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 71)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 3240f8
Memory operation in (null), line 0: allocating a 40-byte 'Normal' block
(# 72)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 73)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 321688
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 74)
after declaration:
before connect:
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 75)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 76)
Memory operation in (null), line 0: allocating a 20-byte 'Normal' block
(# 77)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 78)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 79)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 80)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 81)
Memory operation in (null), line 0: allocating a 20-byte 'Normal' block
(# 82)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 83)
Memory operation in (null), line 0: allocating a 4-byte 'Normal' block
(# 84)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 85)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 86)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 87)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 88)
Memory operation in (null), line 0: allocating a 40-byte 'Normal' block
(# 89)
Memory operation in (null), line 0: allocating a 16-byte 'Normal' block
(# 90)
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 91)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 3245f0
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 3245a0
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 324560
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 324510
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 32439
0Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 324340
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 3240f8
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 321688
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 324290
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 3242e8
after connect:
before sig send:
Memory operation in (null), line 0: allocating a 1-byte 'Normal' block
(# 92)
Memory operation in (null), line 0: allocating a 24-byte 'Normal' block
(# 93)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0)
Memory operation in (null), line 0: freeing a 0-byte 'Normal' block (#
0) at 324510
after sig send:
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net