digitalmars.D.learn - Can i safely cast void* from void[]?
- Heinz <malagana15 yahoo.es> Feb 08 2009
- "Denis Koroskin" <2korden gmail.com> Feb 08 2009
- Burton Radons <burton.radons gmail.com> Feb 08 2009
- Robert Fraser <fraserofthenight gmail.com> Feb 08 2009
Hi, I remember i read around the D site that dinamic arrays can be stored in system memory in a 'non contiguous' way (different locations). I was trying to find again that page but haven't had any lucky. I'm not crazy, i know i saw it. Anyway, i need this info to ensure that i can/can't cast from void[] to void*. I'm working with D dinamic arrays but i need to work this data then with windows API's, these functions take void* as parameters. I pass params of type cast(void*)void[] and have had no problems at the moment. But, what if data in the array is not stored contiguously? windows functions will crash right? I hope you get the idea, and i hope someone to answer me. Thanx.
Feb 08 2009
On Mon, 09 Feb 2009 00:25:41 +0300, Heinz <malagana15 yahoo.es> wrote:Hi, I remember i read around the D site that dinamic arrays can be stored in system memory in a 'non contiguous' way (different locations). I was trying to find again that page but haven't had any lucky. I'm not crazy, i know i saw it.
Never heard that.Anyway, i need this info to ensure that i can/can't cast from void[] to void*. I'm working with D dinamic arrays but i need to work this data then with windows API's, these functions take void* as parameters. I pass params of type cast(void*)void[] and have had no problems at the moment. But, what if data in the array is not stored contiguously? windows functions will crash right? I hope you get the idea, and i hope someone to answer me. Thanx.
No need to cast: void[] array = ...; void* ptr = array.ptr;
Feb 08 2009
Heinz Wrote:I remember i read around the D site that dinamic arrays can be stored in system memory in a 'non contiguous' way (different locations). I was trying to find again that page but haven't had any lucky. I'm not crazy, i know i saw it.
It could have meant that arrays might be extended by allocating more pages onto the end as needed and as possible - the physical location of these pages would be non-contiguous, but they'd be contiguous in the memory view. Any other way would be replicating processor features in software, so I don't see it happening.
Feb 08 2009
Heinz wrote:Hi, I remember i read around the D site that dinamic arrays can be stored in system memory in a 'non contiguous' way (different locations). I was trying to find again that page but haven't had any lucky. I'm not crazy, i know i saw it. Anyway, i need this info to ensure that i can/can't cast from void[] to void*. I'm working with D dinamic arrays but i need to work this data then with windows API's, these functions take void* as parameters. I pass params of type cast(void*)void[] and have had no problems at the moment. But, what if data in the array is not stored contiguously? windows functions will crash right? I hope you get the idea, and i hope someone to answer me. Thanx.
Dynamic arrays are guaranteed to be stored contiguously (possibly it was a suggestion?). Casting to void* should work fine, but to be more portable, you should use (cast(void*) arr.ptr) (in case in future versions or on different platforms, the ptr and length feilds are reversed)
Feb 08 2009









"Denis Koroskin" <2korden gmail.com> 