Please do not introduce a global data structure like this (not thread safe,
not freed until app exits) into PoDoFo. This will be problematic for those
of us with long-lived, multi-threaded, applications. If you want a global
cache of the PdfNames, I request that you add reference counting and
protect access with a mutex (or similarly appropriate, cross-platform,
synchronization barrier).
On Fri, Jan 13, 2017 at 9:19 AM, Mark Rogers <mark.rog...@powermapper.com>
wrote:
> Hi
>
> I think it would probably need to be a static rather than per-document,
> because you won’t always have a reference to an owner document when
> dictionaries are being modified.
>
> class PdfName
> {
> static Map< std::string, PdfName> s_nameTable;
>
> }
>
> That would mean keys are always valid (the name table would only be
> destroyed when the app exits)
>
> One issue is threading – I’m not sure what guarantees PoDoFo gives around
> threading, but this makes dictionary operations non-thread safe unless
> locking is added.
>
> Current memory layout in 32-bit windows is:
>
> class PoDoFo::PdfName size(36):
> 0 (base class PoDoFo::PdfDataType)
> 0 {vfptr} (size=4)
> 4 m_bImmutable (size=1)
> | <alignment member> (size=3)
> 8 std::string m_Data (size =24)
> plus
> 8 bytes HeapAlloc overhead
> 8 bytes malloc overhead
>
> Total: 36+8+8 =52 bytes per dictionary key
>
> If the std::string was changed to a ref counted pointer this would change
> to something like:
>
> class PoDoFo::PdfName size(16):
> 0 (base class PoDoFo::PdfDataType)
> 0 {vfptr} (size=4)
> 4 m_bImmutable (size=1)
> | <alignment member> (size=3)
> 8 std::string* m_Data (size =4)
> plus
> 8 bytes HeapAlloc overhead
> 8 bytes malloc overhead
>
> Total: 31+8+8 =32 bytes per dictionary key
>
> If the dictionary keys are changed to PdfName& or PdfName* then it changes
> to
>
> Total: 4 bytes per dictionary key (Sizeof(PdfName*) = sizeof(void*) = 4
> bytes) with no heap overhead
>
> Best Regards
> Mark
>
>
> Mark Rogers - mark.rog...@powermapper.com
> PowerMapper Software Ltd - www.powermapper.com
> Registered in Scotland No 362274 Quartermile 2 Edinburgh EH3 9GL
>
>
>
>
>
> ------------------------------------------------------------
> ------------------
> Developer Access Program for Intel Xeon Phi Processors
> Access to Intel Xeon Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today. http://sdm.link/xeonphi
> _______________________________________________
> Podofo-users mailing list
> Podofo-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/podofo-users
>
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users