Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9181163
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 17, 20262026-06-17T18:13:19+00:00 2026-06-17T18:13:19+00:00

Possible Duplicate: How do malloc() and free() work? I have encountered a weird problem

  • 0

Possible Duplicate:
How do malloc() and free() work?

I have encountered a weird problem and I’m really not sure why it doesn’t work.

I have the following code in Xcode:

void *ptr = malloc(1024 * 1024 * 100);
memset(ptr, 0, 1024 * 1024 * 100);
free (ptr); //trace this line
ptr = malloc (1024 * 1024 * 100);
memset(ptr, 0, 1024 * 1024 * 100);
free (ptr); //trace this line

I put a breakpoint on each of the free() line, and when I traced the program, free didn’t really free up the 100mb. However, if I change the number from 100 to 500 (allocate 500mb twice), memset 500mb, free() works fine. Why?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-17T18:13:20+00:00Added an answer on June 17, 2026 at 6:13 pm

    When you pass a block of memory to free, that memory does not necessarily get returned to the operating system right away. In fact, based on the wording in the C standard, some argue that the memory can’t be returned to the OS until the program exits.

    The wording in question is (C99, §7.20.3.2/2): “The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation.” Their argument is that when/if a block of memory is allocated and then freed, it should be available for allocation again — but if it’s returned to the OS, some other process might take it, so it’s no longer available for further allocation, as the standard requires. Personally, I don’t find that argument completely convincing (I think “allocated by another process” is still allocation), but such is life.

    Most libraries allocate large chunks of memory from the OS, and then sub-allocate pieces of those large chunks to the program. When memory is freed by the program, the put that block of memory on an “available” list for further allocation. Most also (at least at times) walk through the list of free blocks, merging free blocks that are adjacent addresses.

    Many also follow some heuristics about what memory to keep after it’s been freed. First, the keep an entire block as long as any of the memory in that block remains in use. If, however, all the memory in a block has been freed, they look at its size, and (often) at how much free memory they have available. If the amount available and/or size of the free block exceeds some threshold, they’ll usually release it back to the OS.

    Rather than having fixed thresholds, some try to tailor their behavior to the environment by (for example) basing their thresholds on percentages of available memory instead of fixed sizes. Without that, programs written (say) ten years ago when available memory was typically a lot smaller would often do quite a bit of “thrashing” — repeatedly allocating and releasing the same (or similar) size blocks to/from the OS.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Possible Duplicate: What REALLY happens when you don’t free after malloc? When ending a
Possible Duplicate: What REALLY happens when you don't free after malloc? Is freeing allocated
Possible Duplicate: How do malloc() and free() work? I read somewhere that calling free
Possible Duplicate: How do free and malloc work in C? Consider a scenario where
Possible Duplicate: How do free and malloc work in C? How does free know
Possible Duplicate: Why does simple C code receive segmentation fault? Hey Everyone, I'm sure
Possible Duplicate: Malloc thread-safe? I heard that glibc malloc() was not thread safe, since
Possible Duplicate: what's the point in malloc(0)? what does malloc(0) return? this code displays
Possible Duplicate: How to get memory block length after malloc? If I have a
Possible Duplicate: C implementation of skew heap I have the following struct: typedef struct

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.