• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Garbage collector vs variable lifetime
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Garbage collector vs variable lifetime


  • Subject: Re: Garbage collector vs variable lifetime
  • From: Bill Bumgarner <email@hidden>
  • Date: Fri, 06 Jun 2008 22:03:10 -0700

On Jun 6, 2008, at 9:16 PM, Ken Thomases wrote:
And... we're back to retain/release.
The issue is, how can one know when this technique is necessary? The supposed rules of GC are, if it's in a stack variable, it's safe. The compiler here is doing something behind the programmer's back, which the programmer can't really predict, that's changing the rules.


Quoting the Garbage Collection Programming Guide: "The initial root set of objects is comprised of global variables, stack variables, and objects with external references. These objects are never considered as garbage"

For some values of "never".

Objective-C 2.0's garbage collection system is incompatible with any optimization which changes which variables are on the stack. More accurately, it's an error if compiler optimizations change what are considered root objects.

The problem here is that there is no way for the compiler to know that the char* bytes is somehow connected to the lifespan of the NSData*. Nor is there any way for the collector to know that the char* bytes is somehow an implied root of the NSData* object.


The compiler isn't changing roots and it isn't doing anything that is a bug -- it is merely optimizing the code to use the resources available by recycling bits of memory that refer to items that, given all knowledge that it has, are no longer needed.

There is actually no guarantee that the -bytes method will return a reference to a malloc'd block of data; it may return an arbitrary pointer into some other Data's hunk of data.

This is an edge case. It is uncommon and the kind of edge case that only exists when you dip below Objective-C and into the realm of C.

b.bum







Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Garbage collector vs variable lifetime
      • From: Ken Thomases <email@hidden>
    • Re: Garbage collector vs variable lifetime
      • From: Quincey Morris <email@hidden>
References: 
 >Garbage collector vs variable lifetime (From: Quincey Morris <email@hidden>)
 >Re: Garbage collector vs variable lifetime (From: Bill Bumgarner <email@hidden>)
 >Re: Garbage collector vs variable lifetime (From: Ricky Sharp <email@hidden>)
 >Re: Garbage collector vs variable lifetime (From: Bill Bumgarner <email@hidden>)
 >Re: Garbage collector vs variable lifetime (From: Antonio Nunes <email@hidden>)
 >Re: Garbage collector vs variable lifetime (From: Ken Thomases <email@hidden>)

  • Prev by Date: Re: Garbage collector vs variable lifetime
  • Next by Date: Re: knowing when WebView is done
  • Previous by thread: Re: Garbage collector vs variable lifetime
  • Next by thread: Re: Garbage collector vs variable lifetime
  • Index(es):
    • Date
    • Thread