1

malloc tries to reserve a memory block in my virtual memory, isn't it? What happens if I request 3MB of virtual memory but only 2MB are free. Will the OS then provide more memory? So can virtual memory grow?

今天春天
  • 941
  • 1
  • 13
  • 27
  • 5
    This is a very broad question that cannot be answered in a simple answer. Read up on memory management, heap management and virtual memory. https://en.wikipedia.org/wiki/C_dynamic_memory_allocation – xxbbcc Nov 19 '15 at 15:41
  • 1
    https://en.wikipedia.org/wiki/Virtual_memory – xxbbcc Nov 19 '15 at 15:42
  • 1
    (Not that relevant but) but a great read >>> http://stackoverflow.com/questions/3509714/i-can-use-more-memory-than-how-much-ive-allocated-with-malloc-why – Syed Mauze Rehan Nov 19 '15 at 15:46
  • Actually I just wanted to know whether the system takes care about the process and continuously feeding it with memory or whether the process must request memory "personally". – 今天春天 Nov 19 '15 at 15:49
  • I believe the behavior is unexpected, it could result in a buffer overflow scenario. You should read up. – Syed Mauze Rehan Nov 19 '15 at 15:50
  • 1
    I don't think this is a duplicate of the linked question. This is about requesting more virtual memory than available and a modern OS would handle that. The linked one is simply a writing beyond the allocated memory. – P.P Nov 19 '15 at 15:52
  • About the buffer overflow: malloc can return addresses which were already allocated by a previous malloc? – 今天春天 Nov 19 '15 at 15:53
  • 1
    Regarding the second question (requesting 3 MB of virtual memory when only 2 MB are free): read about [paging](https://en.wikipedia.org/wiki/Paging) – R_Kapp Nov 19 '15 at 15:55
  • The duplicate linked question does not provide an answer to my question at all. – 今天春天 Nov 19 '15 at 15:55
  • @R_Kapp I request 3MB of virtual memory but only 2MB of virtual (not physical) memory are free. – 今天春天 Nov 19 '15 at 16:00
  • In that event, in theory, you should get a NULL return. In practice, that's not exactly what happens due to settings in the OS that typically default to optimistically assume that the `malloc` worked until you try to use the pointer, when it will crash. – R_Kapp Nov 19 '15 at 16:03
  • @R_Kapp so I get a pointer but I cannot use it because no memory is actually available? – 今天春天 Nov 19 '15 at 16:09
  • @今天春天 On the buffer overflow, yes it might happen if your program keeps on doing malloc. – Syed Mauze Rehan Nov 19 '15 at 16:15
  • @今天春天: That is correct. – R_Kapp Nov 19 '15 at 16:31
  • Thanks, this actually helped alot. So I can assume that malloc only returns null if the system sees no way to get more memory? – 今天春天 Nov 19 '15 at 16:32

0 Answers0