View Issue Details

IDProjectCategoryView StatusLast Update
0029590Open CASCADEOCCT:Codingpublic2020-09-23 09:47
ReporterabvAssigned Tobugmaster  
PrioritynormalSeverityminor 
Status closedResolutionfixed 
Product Version7.2.0 
Target Version7.3.0Fixed in Version7.3.0 
Summary0029590: Coding - avoid usage of Standard_EXPORT attribute for inline methods
DescriptionThere are some places (around 300) where Standard_EXPORT attribute is attached to inline methods of the classes. On Windows this leads to instantiation of these methods as exported within all DLLs whose code includes corresponding header.
Steps To Reproduce1. Generate C++ file including all headers of OCCT (except ones dependent on VTK -- these use export for whole classes...):

cd %CASROOT%/inc
echo "#include <windows.h>" >..\all_includes.cpp
ls -1 *.hxx | grep -i -v "ivtk" | gawk '{print "#include <" $0 ">"}' >>..\all_includes.cpp

2. Build DLL with the only source being that file, and option /FORCE to ensure creation of DLL even if some symbols remain unresolved (this allows to avoid linking with OCCT libs)

3. List all exports of this DLL (excluding constructor and destructor closure symbols generated automatically for unclear reason):

rem Set path to dumpbin.exe if not yet set, on example of VS 2015
set "PATH=%PATH%;%VS140COMNTOOLS%\..\..\VC\BIN"

dumpbin /exports all_includes.dll > all_exports.txt
undname all_exports.txt | grep -v "structor closure" > all_exports_undecorated.txt

The list should be empty
TagsNo tags attached.
Test case numberNot needed

Attached Files

  • all_exports_undecorated.txt (121,899 bytes)

Relationships

parent of 0031789 closedabv Open CASCADE Coding Rules - remove redundant Standard_EXPORT from TKMesh 

Activities

abv

2018-03-19 10:11

manager  

all_exports_undecorated.txt (121,899 bytes)

abv

2018-03-19 10:13

manager   ~0074621

Attached file all_exports_undecorated.txt contains list of all exports generated on current master (with fixes for #22651 and 0029589) using the procedure described above (except that headers of old persistence are removed -- they cause some additional problems on linking).

abv

2018-03-19 10:14

manager   ~0074622

The size of the DLL produced by the above procedure is 136 KB; on a version with about 1/3 of exports eliminated that size is 100 KB.

abv

2018-03-19 18:34

manager   ~0074667

When exports of all inline methods are eliminated, empty DLL gets reduced to 32 KB in size; it still defines 128 symbols of the kind '...structor closure' generated automatically. I have no idea now why they are generated and how to avoid this.

git

2018-03-19 19:40

administrator   ~0074677

Branch CR29590 has been created by abv.

SHA-1: 44f526cf60db84a0b517d284071682ac9a871774


Detailed log of new commits:

Author: abv
Date: Mon Mar 19 10:07:06 2018 +0300

    0029590: Coding - avoid usage of Standard_EXPORT attribute for inline methods
    
    All occurrences of Standard_EXPORT attached to inline methods in OCCT code are eliminated.
    Some unused classes and C++ files producing no code are deleted.

abv

2018-03-19 19:45

manager   ~0074678

Fix is pushed to CR29590, please review.

Note that the effect of this change on the DLLs size is minimal; binaries produced on this branch (based on CR22651) are 61.4 KB vs 61.7 KB on master.

kgv

2018-03-19 19:49

developer   ~0074679

Patch looks OK.

abv

2018-03-19 22:06

manager   ~0074685

For tests, see Jenkins job CR29590-master-abv

bugmaster

2018-03-20 12:16

administrator   ~0074695

Combination -
OCCT branch : CR29590 SHA - 44f526cf60db84a0b517d284071682ac9a871774
Products branch : master SHA - 2f8f449f24696d59603ade3d9a086e77e8b9a304
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian70-64:
OCCT
Total CPU difference: 18142.109999999855 / 18107.97999999989 [+0.19%]
Products
Total CPU difference: 7445.849999999999 / 7427.109999999995 [+0.25%]
Windows-64-VC10:
OCCT
Total CPU difference: 18003.451405998494 / 17842.61437499857 [+0.90%]
Products
Total CPU difference: 8132.129328699942 / 8148.135031299978 [-0.20%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2018-03-24 20:01

administrator   ~0074875

Branch CR29590 has been deleted by kgv.

SHA-1: 44f526cf60db84a0b517d284071682ac9a871774

Related Changesets

occt: master 0f57ab75

2018-03-19 07:07:06

abv


Committer: bugmaster Details Diff
0029590: Coding - avoid usage of Standard_EXPORT attribute for inline methods

All occurrences of Standard_EXPORT attached to inline methods in OCCT code are eliminated.
Some unused classes and C++ files producing no code are deleted.
Affected Issues
0029590
mod - src/AIS/AIS_ConnectedInteractive.hxx Diff File
mod - src/AIS/AIS_Dimension.hxx Diff File
mod - src/AIS/AIS_Manipulator.hxx Diff File
mod - src/AIS/AIS_ManipulatorOwner.hxx Diff File
mod - src/Aspect/Aspect_NeutralWindow.hxx Diff File
mod - src/Bnd/Bnd_B2f.hxx Diff File
mod - src/BOPAlgo/BOPAlgo_BuilderArea.hxx Diff File
mod - src/BOPAlgo/BOPAlgo_Builder_2.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_MakerVolume.hxx Diff File
mod - src/BOPDS/BOPDS_Curve.hxx Diff File
mod - src/BOPDS/BOPDS_FaceInfo.hxx Diff File
mod - src/BOPDS/BOPDS_IndexRange.hxx Diff File
mod - src/BOPDS/BOPDS_IndexRange.lxx Diff File
mod - src/BOPDS/BOPDS_Pave.hxx Diff File
mod - src/BOPDS/BOPDS_Pave.lxx Diff File
rm - src/BOPTools/BOPTools_DataMapOfShapeSet.hxx Diff File
rm - src/BOPTools/BOPTools_EdgeSet.hxx Diff File
rm - src/BOPTools/BOPTools_EdgeSet.lxx Diff File
rm - src/BOPTools/BOPTools_ListOfEdgeSet.hxx Diff File
rm - src/BOPTools/BOPTools_ListOfShapeSet.hxx Diff File
rm - src/BOPTools/BOPTools_ShapeSet.cxx Diff File
rm - src/BOPTools/BOPTools_ShapeSet.hxx Diff File
rm - src/BOPTools/BOPTools_ShapeSet.lxx Diff File
mod - src/BOPTools/FILES Diff File
mod - src/BRepApprox/BRepApprox_TheMultiLineToolOfApprox.hxx Diff File
mod - src/BRepClass3d/BRepClass3d_SolidPassiveClassifier.hxx Diff File
mod - src/BRepExtrema/BRepExtrema_DistanceSS.hxx Diff File
mod - src/BRepExtrema/BRepExtrema_ExtCC.hxx Diff File
mod - src/BRepExtrema/BRepExtrema_ExtCF.hxx Diff File
mod - src/BRepExtrema/BRepExtrema_ExtFF.hxx Diff File
mod - src/BRepExtrema/BRepExtrema_ExtPC.hxx Diff File
mod - src/BRepExtrema/BRepExtrema_ExtPF.hxx Diff File
mod - src/BRepFeat/BRepFeat_MakeDPrism.hxx Diff File
rm - src/BRepFeat/BRepFeat_MakeDPrism.lxx Diff File
mod - src/BRepFeat/BRepFeat_SplitShape.hxx Diff File
mod - src/BRepFeat/FILES Diff File
mod - src/BRepGProp/BRepGProp_VinertGK.hxx Diff File
rm - src/BRepGProp/BRepGProp_VinertGK.lxx Diff File
mod - src/BRepGProp/FILES Diff File
mod - src/BRepMesh/BRepMesh_Classifier.hxx Diff File
mod - src/BRepMesh/BRepMesh_DiscretFactory.hxx Diff File
mod - src/ElCLib/ElCLib.hxx Diff File
mod - src/ElSLib/ElSLib.hxx Diff File
mod - src/Geom2dHatch/Geom2dHatch_Hatcher.hxx Diff File
mod - src/GeometryTest/GeometryTest_DrawableQualifiedCurve2d.hxx Diff File
mod - src/GeomFill/GeomFill_Pipe.hxx Diff File
mod - src/GeomInt/GeomInt_TheMultiLineToolOfWLApprox.hxx Diff File
mod - src/HLRAlgo/HLRAlgo_Coincidence.hxx Diff File
mod - src/HLRBRep/HLRBRep_LineTool.hxx Diff File
mod - src/HLRBRep/HLRBRep_SLPropsATool.hxx Diff File
mod - src/IGESCAFControl/IGESCAFControl_Reader.hxx Diff File
mod - src/IntPatch/IntPatch_Point.hxx Diff File
mod - src/IntPatch/IntPatch_PrmPrmIntersection.hxx Diff File
mod - src/IntPatch/IntPatch_RLine.hxx Diff File
mod - src/IntPatch/IntPatch_WLine.hxx Diff File
mod - src/LDOM/LDOM_Element.hxx Diff File
mod - src/LocOpe/FILES Diff File
mod - src/LocOpe/LocOpe_Gluer.hxx Diff File
mod - src/LocOpe/LocOpe_PntFace.hxx Diff File
rm - src/LocOpe/LocOpe_PntFace.lxx Diff File
mod - src/MAT/MAT_ListOfBisector.hxx Diff File
mod - src/MAT/MAT_ListOfEdge.hxx Diff File
mod - src/math/math_BracketMinimum.hxx Diff File
mod - src/math/math_FunctionSetRoot.hxx Diff File
mod - src/math/math_IntegerVector.hxx Diff File
mod - src/MeshVS/MeshVS_SensitiveQuad.hxx Diff File
mod - src/NCollection/NCollection_SparseArrayBase.hxx Diff File
mod - src/NCollection/NCollection_UBTree.hxx Diff File
mod - src/OpenGl/OpenGl_View.hxx Diff File
mod - src/Prs3d/Prs3d_PresentationShadow.hxx Diff File
mod - src/Select3D/Select3D_SensitiveTriangle.hxx Diff File
mod - src/SelectMgr/SelectMgr_BaseFrustum.hxx Diff File
mod - src/SelectMgr/SelectMgr_ViewerSelector.hxx Diff File
mod - src/ShapeFix/ShapeFix_Wire.hxx Diff File
mod - src/ShapePersistent/ShapePersistent.cxx Diff File
mod - src/ShapePersistent/ShapePersistent_Geom.hxx Diff File
mod - src/ShapePersistent/ShapePersistent_Geom2d.cxx Diff File
mod - src/ShapePersistent/ShapePersistent_Geom2d.hxx Diff File
mod - src/ShapePersistent/ShapePersistent_Geom_Curve.cxx Diff File
mod - src/ShapePersistent/ShapePersistent_HSequence.hxx Diff File
mod - src/ShapePersistent/ShapePersistent_TopoDS.hxx Diff File
mod - src/ShapeProcess/ShapeProcess_ShapeContext.hxx Diff File
mod - src/StdLPersistent/StdLPersistent_Data.hxx Diff File
mod - src/StdLPersistent/StdLPersistent_Document.hxx Diff File
mod - src/StdLPersistent/StdLPersistent_HString.hxx Diff File
mod - src/StdLPersistent/StdLPersistent_TreeNode.hxx Diff File
mod - src/StdLPersistent/StdLPersistent_Void.hxx Diff File
mod - src/StdObjMgt/StdObjMgt_Attribute.hxx Diff File
mod - src/StdObjMgt/StdObjMgt_Persistent.hxx Diff File
mod - src/StdObjMgt/StdObjMgt_SharedObject.hxx Diff File
mod - src/StdPersistent/StdPersistent_TopLoc.hxx Diff File
mod - src/StepDimTol/StepDimTol_GeoTolAndGeoTolWthDatRef.hxx Diff File
mod - src/StepDimTol/StepDimTol_GeoTolAndGeoTolWthDatRefAndGeoTolWthMod.hxx Diff File
mod - src/StepDimTol/StepDimTol_GeoTolAndGeoTolWthMod.hxx Diff File
mod - src/StepRepr/StepRepr_CharacterizedRepresentation.hxx Diff File
mod - src/StepVisual/StepVisual_AnnotationFillAreaOccurrence.hxx Diff File
mod - src/StepVisual/StepVisual_CameraModelD3MultiClipping.hxx Diff File
mod - src/StepVisual/StepVisual_CameraModelD3MultiClippingIntersection.hxx Diff File
mod - src/StepVisual/StepVisual_CameraModelD3MultiClippingUnion.hxx Diff File
mod - src/Storage/Storage_InternalData.hxx Diff File
mod - src/TCollection/TCollection_AsciiString.hxx Diff File
mod - src/TCollection/TCollection_ExtendedString.hxx Diff File
mod - src/TDF/TDF_Attribute.hxx Diff File
mod - src/TDF/TDF_Attribute.lxx Diff File
mod - src/TDF/TDF_Delta.hxx Diff File
mod - src/TDocStd/TDocStd_Document.hxx Diff File
mod - src/TFunction/TFunction_Logbook.hxx Diff File
mod - src/TNaming/TNaming_IteratorOnShapesSet.hxx Diff File
mod - src/TObj/TObj_Application.hxx Diff File
mod - src/TObj/TObj_LabelIterator.hxx Diff File
mod - src/TObj/TObj_Model.hxx Diff File
mod - src/TObj/TObj_Object.hxx Diff File
mod - src/TObj/TObj_TIntSparseArray.hxx Diff File
mod - src/TObj/TObj_TReference.hxx Diff File
mod - src/TopOpeBRepBuild/TopOpeBRepBuild_FuseFace.hxx Diff File
mod - src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.hxx Diff File
mod - src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.hxx Diff File
mod - src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.hxx Diff File
mod - src/XCAFView/XCAFView_Object.hxx Diff File
mod - src/XSControl/XSControl_Reader.hxx Diff File
mod - src/XSControl/XSControl_TransferWriter.hxx Diff File

Issue History

Date Modified Username Field Change
2018-03-19 10:06 abv New Issue
2018-03-19 10:06 abv Assigned To => kgv
2018-03-19 10:11 abv File Added: all_exports_undecorated.txt
2018-03-19 10:13 abv Note Added: 0074621
2018-03-19 10:14 abv Note Added: 0074622
2018-03-19 18:16 abv Steps to Reproduce Updated
2018-03-19 18:32 abv Steps to Reproduce Updated
2018-03-19 18:34 abv Note Added: 0074667
2018-03-19 19:40 git Note Added: 0074677
2018-03-19 19:45 abv Note Added: 0074678
2018-03-19 19:45 abv Status new => resolved
2018-03-19 19:45 abv Target Version 7.4.0 => 7.3.0
2018-03-19 19:49 kgv Assigned To kgv => bugmaster
2018-03-19 19:49 kgv Status resolved => reviewed
2018-03-19 19:49 kgv Product Version => 7.2.0
2018-03-19 19:49 kgv Note Added: 0074679
2018-03-19 22:06 abv Note Added: 0074685
2018-03-20 12:16 bugmaster Note Added: 0074695
2018-03-20 12:16 bugmaster Status reviewed => tested
2018-03-20 12:16 bugmaster Test case number => Not needed
2018-03-24 11:51 bugmaster Changeset attached => occt master 0f57ab75
2018-03-24 11:51 bugmaster Status tested => verified
2018-03-24 11:51 bugmaster Resolution open => fixed
2018-03-24 20:01 git Note Added: 0074875
2018-06-29 21:14 aiv Fixed in Version => 7.3.0
2018-06-29 21:19 aiv Status verified => closed
2020-09-23 09:47 kgv Relationship added parent of 0031789