Boost logo

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