Thursday, February 14, 2008

variable-scope vs object-lifetime

(See also blog post on [[a heap-stack dual variable]].)

[[OO MutliThreading using c++]] P 355 lists 4 scopes.

Sound byte -- any object's address is always immutable. It's a simple, fundamental concept but not always obvious to me:)

Sound byte -- a pointer (and a java reference) variable is a 32bit memory location[3] with a _permant_name_. This 32bit object is the 32bit pointer itself. When you reseat the pointer, you change the state of this 32bit pointer object, but this 32bit pointer object stays at the old address.

[3] often on stack, even if the pointee is on heap)

Q: A fully qualified var name is unique by definition. Mem addresses are unique by definition. How are they related?
* A stackVar has a name attached to the address. Is the name->address mapping permanent? I think so.
** what if the stackvar is a ptr to a heap object? 4-byte ptr is on stack? yeah
* A c++ ref is a permanent name permanently attached to an address, even after the address is reclaimed (ref becomes invalid) Think Unix symlink.

* a heap object is always nameless. When created, new() returns the address only. Can you ever attach a name to that address? i doubt it. You can attach multiple pointers and name the pointers, which have 4-byte addresses. Heap holds unnamed addresses. Think Unix Hardlink.

* java objects are always nameless. An object (address immutable) has no names attached to address. Name is for the variable, which can be reseated to another address. Unix hardlink. Just like pointers.

[[c++ primer]] says variables have scope and objects have lifetime.
* Simple stackVar has matching scope/lifetime. When a regular stackVar goes out of scope, the object goes.
* static locals have small scope and long lifetime
* fields have class scope, and same lifetime as host object??
* heap objects are complicated -- long life and no scope. A heap object is associated with zero[2] or more pointer variables. Usually a ptr variable is a stackVar or a field. The 4-byte pointer object has its own lifetime and a variable scope. If heap obj links to just one ptr variable, and it goes out of scope and 4-byte reclaimed, we get leaks.

[2] zero means unreachable object and a leak

No comments:

Total Pageviews

my favorite topics (labels)

_fuxi (302) _misLabel (13) _orig? (3) _rm (2) _vague (2) clarified (58) cpp (39) cpp_const (22) cpp_real (76) cpp/java/c# (101) cppBig4 (54) cppSmartPtr (35) cppSTL (33) cppSTL_itr (27) cppSTL_real (26) cppTemplate (28) creditMkt (14) db (65) db_sybase (43) deepUnder (31) dotnet (20) ECN (27) econ/bank` (36) fin/sys_misc (43) finGreek (34) finReal (45) finRisk (30) finTechDesign (46) finTechMisc (32) finVol (66) FixedIncom (28) fMath (7) fMathOption (33) fMathStoch (67) forex (39) gr8IV_Q (46) GTD_skill (15) GUI_event (30) inMemDB (42) intuit_math (41) intuitFinance (57) javaMisc (68) javaServerSide (13) lambda/delegate (22) marketData (28) math (10) mathStat (55) memIssue (8) memMgmt (66) metaProgram` (6) OO_Design (84) original_content (749) polymorphic/vptr (40) productive (21) ptr/ref (48) py (28) reflect (8) script`/unix (82) socket/stream (39) subquery/join (30) subvert (13) swing/wpf (9) sysProgram` (16) thread (164) thread_CAS (15) thread_cpp (28) Thread* (22) timeSaver (80) transactional (23) tune (24) tuneDB (40) tuneLatency (30) z_ajax (9) z_algoDataStruct (41) z_arch (26) z_arch_job (27) z_automateTest (17) z_autoTrad` (19) z_bestPractice (39) z_bold (83) z_bondMath (35) z_book (18) z_boost (19) z_byRef^Val (32) z_c#GUI (43) z_c#misc (80) z_cast/convert (28) z_container (67) z_cStr/arr (39) z_Favorite* (8) z_FIX (15) z_forex (48) z_fwd_Deal (18) z_gz=job (33) z_gzBig20 (13) z_gzMgr (13) z_gzPain (20) z_gzThreat (19) z_hib (19) z_IDE (52) z_ikm (5) z_IR_misc (36) z_IRS (26) z_javaWeb (28) z_jdbc (10) z_jobFinTech (46) z_jobHunt (20) z_jobRealXp (10) z_jobStrength (15) z_jobUS^asia (27) z_letter (42) z_linq (10) z_memberHid` (11) z_MOM (54) z_nestedClass (5) z_oq (24) z_PCP (12) z_pearl (1) z_php (20) z_prodSupport (7) z_py (31) z_quant (14) z_regex (8) z_rv (38) z_skillist (48) z_slic`Problem (6) z_SOA (14) z_spring (25) z_src_code (8) z_swingMisc (50) z_swingTable (26) z_unpublish (2) z_VBA/Excel (8) z_windoz (17) z_wpfCommand (9)

About Me

New York (Time Square), NY, United States
http://www.linkedin.com/in/tanbin