Jump to page: 1 2 3
Thread overview
Dizi sınırı ayarlanabiliyor mu?
Jan 29, 2012
Salih Dinçer
Jan 29, 2012
Salih Dinçer
Jan 29, 2012
Salih Dinçer
Jan 29, 2012
Salih Dinçer
Jan 30, 2012
Salih Dinçer
Jan 30, 2012
Salih Dinçer
Jan 30, 2012
Salih Dinçer
Jan 30, 2012
zafer
Jan 30, 2012
Salih Dinçer
Jan 31, 2012
zafer
Jan 31, 2012
erdem
Jan 31, 2012
Salih Dinçer
Jan 31, 2012
zafer
Feb 01, 2012
Salih Dinçer
Feb 01, 2012
Salih Dinçer
Feb 02, 2012
Salih Dinçer
Feb 02, 2012
Mengu
January 29, 2012

Merhaba,

Sınırdan kastım derleyicinin kısıtlması, derleme anında ise şu hatayı almaktayım:

bws.d(13): Error: index 16777216 overflow for static array

Acaba bir derleme parametresi mi var? Çünkü bu değer, en fazla (2^24)-1 olması gerektiğine işaret ediyor. Dizi 1 byte'lık (ubyte) verilerinde oluşuyor. Aslında aynı hatayı D1 derleyicisinde alınca D2'yi denemeyi düşündüm. Son sürümde, olası en fazla dizi elemanı sayısının daha fazla olacağını zannetmiştim.

Bunu arttırmanın bir yolu var mı? Eğer yoksa dinamik dizi kullanımını nasıl yapabilirim? Aslında başlangıçtaki değerlere ihtiyaç duymuyorum ve baştakileri silip yoluma devam edebilirim. Şimdi sitemizde bellek makalesini buldum; araştırmadayım:

http://ddili.org/forum/unb_lib/designs/modern/img/arrow_right.pngBellek Yönetimi (Memory Management) (http://ddili.org/makale/bellek.html) - Çeviren: Ali Çehreli (14 Temmuz 2009)

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Yazılımın kurulum bölümü şöyle:

import std.stdio, std.cstream;

	const short xVagon = 8;
	const uint xAsal = 268435439; //179424673;
	const uint xDizi = (xAsal/16) + 1; //16777216

	struct Tren {
			uint bayt;
			ubyte bit;
	};

	Tren[xVagon] vagon;
	ubyte[xDizi] xData;

Aynı hatayı 64 bit bir sistemde ve 8 GB. bellekte de aldım. Bu arada makaleyi okumaya başladım da hoşuma gitti...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Bu kodu şimdi tekrar denedim ama 'ubyte' veri tipini 'uint' ile değiştirdim. Sanırım her bir eleman bellekte 32 bit yer kapladığından yine sorun oldu. Hata iletisindeki sayısal değerin bir eksiğinde taşma olduğunu belirtti; bu (2^24)-1 demekti. Bu durumda 32 bit değişkenler için 2^22 ile 4'e bölmem gerekir.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Bu şekilde iki sürümde de denedim hata alıyorum:

salih@DB-N150-N210-N220:~$ dmd bws.d
bws.d(15): Error: cannot evaluate new ubyte[](161u) at compile time
salih@DB-N150-N210-N220:~$ gdc bws.d -o bws
bws.d:15: Error: non-constant expression new ubyte[](cast(uint)161)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Program yığıtının büyüklüğü işletim sisteminin bir sınırıdır. Onunla mı ilgili acaba? Yoksa dilde böyle bir kısıtlama bilmiyorum.

Programcı hatası da olabilir. (Ben hep yapıyorum. ;)) Denediğin kodu gösterir misin.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Alıntı (Salih Dinçer):

>

bellek makalesini buldum; araştırmadayım

Bence hiç başlama! :) D1 zamanından kalma bir makale o. Artık 'byte' diye bir tür bile kalmadı.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Fikrimi değiştirdim: Makale yine de yararlı tabii ama D1 zamanında yazıldığını unutmamak gerek.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

D'de sabit uzunluklu dizi (statik dizi) ve dilim farklı. Sabit uzunluklu diziler değer türleri oldukları için oldukları gibi program yığıtında oturmak zorundalar. İşletim sisteminin bir duvarına çarpmış oluyoruz.

Çözüm olarak bütün dizi dinamik olarak new ile ayrılabilir. Onu da dilim olarak kullanabiliriz:

   ubyte[] xData = new ubyte[xDizi];

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 29, 2012

Kodda o satırı görebilir miyiz? Ben başına enum yazınca aynı hatayı alıyorum:

   enum xData = /* ... */;

Bazı işlemler henüz derleme zamanında yapılamıyorlar. Bunların sayısı gittikçe azalıyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 30, 2012

Kusura bakmayın, hata bendeymiş. Gerekli, gereksiz o kadar çok şey deniyorum ki diziyi new ile sınıf (class mat) içinde tanımlamışım. İşte deneme kodum şöyle ve denediklerimin sadece küçük bir kısmı...:)

class mat {
	const int on = 10;
	static uint yedi = 7;
	static ubyte[] veri;

	static int karesi(int i) { return i * i; }
}
void main () {
	auto d = new mat[100];
	//ubyte[8379984] veri;
	d[1].veri = new ubyte[16777214*mat.on];
	d[2].veri = new ubyte[16777214*20];
	writefln ("%d", d[1].veri.length);
					d[1].veri[335544280-1] = 1;
	writefln ("%d", d[2].veri[335544280-1]);
/*
	writefln("d'nin karesi:\t%d", d[0].karesi(d[0].yedi));
	writefln("d'nin yedisi:\t%d", d[0].yedi);
	d[0].yedi = 8;
	writefln("d'nin yedisi:\t%d", d[0].yedi);
	writefln("d'nin karesi:\t%d", d[0].karesi(d[0].yedi));//*/
	din.readLine();
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3