Thread overview
Is there any overhead iterating over a pointer using a slice?
May 31, 2016
Gary Willoughby
May 31, 2016
Adam D. Ruppe
May 31, 2016
Johan Engelen
Jun 01, 2016
Gary Willoughby
May 31, 2016
In relation to this thread:

http://forum.dlang.org/thread/ddckhvcxlyuvuiyazpqy@forum.dlang.org

Where I asked about slicing a pointer, I have another question:

If I have a pointer and iterate over it using a slice, like this:

	T* foo = &data;

	foreach (element; foo[0 .. length])
	{
		...
	}

Is there any overhead compared with pointer arithmetic in a for loop?
May 31, 2016
On Tuesday, 31 May 2016 at 18:55:18 UTC, Gary Willoughby wrote:
> Is there any overhead compared with pointer arithmetic in a for loop?

Very very little. The slice will ensure start and stop indexes are in bounds before the loop (and throw an RangeError if it isn't), but inside the loop, it should generate exactly the same code.
May 31, 2016
On Tuesday, 31 May 2016 at 18:55:18 UTC, Gary Willoughby wrote:
>
> If I have a pointer and iterate over it using a slice, like this:
>
> 	T* foo = &data;
>
> 	foreach (element; foo[0 .. length])
> 	{
> 		...
> 	}
>
> Is there any overhead compared with pointer arithmetic in a for loop?

Use the assembly output of your compiler to check! :-)  It's fun to look at.
For example, with GDC:
http://goo.gl/Ur9Srv

No difference.

cheers,
  Johan

June 01, 2016
On Tuesday, 31 May 2016 at 20:52:20 UTC, Johan Engelen wrote:
> On Tuesday, 31 May 2016 at 18:55:18 UTC, Gary Willoughby wrote:
>>
>> If I have a pointer and iterate over it using a slice, like this:
>>
>> 	T* foo = &data;
>>
>> 	foreach (element; foo[0 .. length])
>> 	{
>> 		...
>> 	}
>>
>> Is there any overhead compared with pointer arithmetic in a for loop?
>
> Use the assembly output of your compiler to check! :-)  It's fun to look at.
> For example, with GDC:
> http://goo.gl/Ur9Srv
>
> No difference.
>
> cheers,
>   Johan

That's pretty nice.