<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Eure Meinung zu meinem Ringpuffer]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beginne gerade an einem Programm zu schreiben, dass an einer Kamera hängt und permanent Bilder von dieser akquiriert. Diese will ich in einem Ringpuffer ablegen. Um diesen Buffer vorher zu testen, habe ich das kleine Programm weiter unten geschrieben. Meine Frage dazu wäre, ob das so effizient gelöst ist oder ob ihr vielleicht Verbesserungsvorschläge dazu habt, wie es schneller bzw. korrekt aussehen könnte? Vielen Dank!</p>
<p>V.K.</p>
<pre><code class="language-cpp">// Klasse, die die Bilddaten in einem Ringpuffer ablegt
class BildDaten
{
public:
	BildDaten::BildDaten(int iMax, int iX,int iY) : m_iMaxSize (iMax),m_iX (iX),m_iY(iY),m_iCnt(0)
	{
		int i,k;
		vpData = new unsigned char **[m_iMaxSize];
		for (k=0;k&lt;m_iMaxSize;k++)
		{
			vpData[k] = new unsigned char *[m_iX];
			for (i=0;i&lt;m_iX;i++)
				vpData[k][i] = new unsigned char [m_iY];
		}
	}
	BildDaten::~BildDaten()
	{
		int i,j;

		// Ist der Speicherplatz korrekt freigegeben?
		for (i=0;i&lt;m_iMaxSize;i++)
		{
			for (j=0;j&lt;m_iX;j++)
				delete[] vpData[i][j];
			delete[] vpData[i];
		}
		delete vpData;
	}

	void Add (unsigned char **pData)
	{
		int i;
		if (m_iCnt == m_iMaxSize)
			m_iCnt = 0;
		// Geht das vielleicht schneller?
		for (i=0;i&lt;m_iX;i++)
			memcpy(vpData[m_iCnt][i],pData[i],m_iY*sizeof(pData[i]));
		m_iCnt++;
	}
	void Show ()
	{
		int i,j,k;
		for (k=0;k&lt;m_iMaxSize;k++)
		{
			for	 (i=0;i&lt;m_iX;i++)
			{
				for	 (j=0;j&lt;m_iX;j++)
					std::cout &lt;&lt; (int)vpData[k][i][j] &lt;&lt; &quot; &quot;;
				std::cout &lt;&lt; std::endl;
			}
			std::cout &lt;&lt; std::endl;
		}
	}
private:
	int m_iCnt,m_iMaxSize,m_iX,m_iY;
	unsigned char *** vpData;
};

// Hauptfunktion
int main(int argc, char* argv[])
{
	int i,j,x,jMax,iMax,xMax;
	unsigned char **pData;

	xMax = 3;
	jMax = iMax = 3;
	BildDaten Data(xMax,iMax,jMax);

	pData = new unsigned char *[iMax];
	for (j=0;j&lt;iMax;j++)
		pData[j] = new unsigned char [jMax];

	srand(time(0));
	for (x=0;x&lt;4;x++)
	{
		for (i=0;i&lt;iMax;i++)
		{
			for (j=0;j&lt;jMax;j++)
			{
				pData[i][j] = rand()%10;
				std::cout &lt;&lt; (int) pData[i][j] &lt;&lt; &quot; &quot;;
			}
			std::cout &lt;&lt; std::endl;
		}
		std::cout &lt;&lt; std::endl;

		Data.Add(pData);
	}

	std::cout &lt;&lt; std::endl;
	Data.Show();

	for (i=0;i&lt;iMax;i++)
		delete[] pData[i];
	delete pData;
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/215694/eure-meinung-zu-meinem-ringpuffer</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 03:19:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215694.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Jun 2008 09:32:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eure Meinung zu meinem Ringpuffer on Sat, 14 Jun 2008 10:54:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beginne gerade an einem Programm zu schreiben, dass an einer Kamera hängt und permanent Bilder von dieser akquiriert. Diese will ich in einem Ringpuffer ablegen. Um diesen Buffer vorher zu testen, habe ich das kleine Programm weiter unten geschrieben. Meine Frage dazu wäre, ob das so effizient gelöst ist oder ob ihr vielleicht Verbesserungsvorschläge dazu habt, wie es schneller bzw. korrekt aussehen könnte? Vielen Dank!</p>
<p>V.K.</p>
<pre><code class="language-cpp">// Klasse, die die Bilddaten in einem Ringpuffer ablegt
class BildDaten
{
public:
	BildDaten::BildDaten(int iMax, int iX,int iY) : m_iMaxSize (iMax),m_iX (iX),m_iY(iY),m_iCnt(0)
	{
		int i,k;
		vpData = new unsigned char **[m_iMaxSize];
		for (k=0;k&lt;m_iMaxSize;k++)
		{
			vpData[k] = new unsigned char *[m_iX];
			for (i=0;i&lt;m_iX;i++)
				vpData[k][i] = new unsigned char [m_iY];
		}
	}
	BildDaten::~BildDaten()
	{
		int i,j;

		// Ist der Speicherplatz korrekt freigegeben?
		for (i=0;i&lt;m_iMaxSize;i++)
		{
			for (j=0;j&lt;m_iX;j++)
				delete[] vpData[i][j];
			delete[] vpData[i];
		}
		delete vpData;
	}

	void Add (unsigned char **pData)
	{
		int i;
		if (m_iCnt == m_iMaxSize)
			m_iCnt = 0;
		// Geht das vielleicht schneller?
		for (i=0;i&lt;m_iX;i++)
			memcpy(vpData[m_iCnt][i],pData[i],m_iY*sizeof(pData[i]));
		m_iCnt++;
	}
	void Show ()
	{
		int i,j,k;
		for (k=0;k&lt;m_iMaxSize;k++)
		{
			for	 (i=0;i&lt;m_iX;i++)
			{
				for	 (j=0;j&lt;m_iX;j++)
					std::cout &lt;&lt; (int)vpData[k][i][j] &lt;&lt; &quot; &quot;;
				std::cout &lt;&lt; std::endl;
			}
			std::cout &lt;&lt; std::endl;
		}
	}
private:
	int m_iCnt,m_iMaxSize,m_iX,m_iY;
	unsigned char *** vpData;
};

// Hauptfunktion
int main(int argc, char* argv[])
{
	int i,j,x,jMax,iMax,xMax;
	unsigned char **pData;

	xMax = 3;
	jMax = iMax = 3;
	BildDaten Data(xMax,iMax,jMax);

	pData = new unsigned char *[iMax];
	for (j=0;j&lt;iMax;j++)
		pData[j] = new unsigned char [jMax];

	srand(time(0));
	for (x=0;x&lt;4;x++)
	{
		for (i=0;i&lt;iMax;i++)
		{
			for (j=0;j&lt;jMax;j++)
			{
				pData[i][j] = rand()%10;
				std::cout &lt;&lt; (int) pData[i][j] &lt;&lt; &quot; &quot;;
			}
			std::cout &lt;&lt; std::endl;
		}
		std::cout &lt;&lt; std::endl;

		Data.Add(pData);
	}

	std::cout &lt;&lt; std::endl;
	Data.Show();

	for (i=0;i&lt;iMax;i++)
		delete[] pData[i];
	delete pData;
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1528818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528818</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Sat, 14 Jun 2008 10:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eure Meinung zu meinem Ringpuffer on Sat, 14 Jun 2008 12:20:46 GMT]]></title><description><![CDATA[<p>Wenn du wirklich wissen willst, wo der Flaschenhals ist, rate ich dir einen Profiler zu benutzen und das mal gründlich zu testen. (Pseudooptimierung bringt dir nicht viel)</p>
<p>AMD Codeanalyst:<br />
<a href="http://developer.amd.com/CPU/Pages/default.aspx" rel="nofollow">http://developer.amd.com/CPU/Pages/default.aspx</a></p>
<p>Allerdings würde ich dir raten das mal mit der Standardcontainer (und Algorithmen) zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528918</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 14 Jun 2008 12:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Eure Meinung zu meinem Ringpuffer on Sat, 14 Jun 2008 13:36:17 GMT]]></title><description><![CDATA[<p>Hi drakon,</p>
<p>danke dir für Deine Antwort. Warum denkst du, dass es mit Standardcontainern besser wäre? Du meinst damit sicher die STL, oder nicht?</p>
<p>Was meinst du eigentlich mit dem Ausdruck Flaschenhals?</p>
<p>Danke dir!<br />
V.K.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528992</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Sat, 14 Jun 2008 13:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eure Meinung zu meinem Ringpuffer on Sat, 14 Jun 2008 13:40:29 GMT]]></title><description><![CDATA[<p>VerbalKint schrieb:</p>
<blockquote>
<p>Hi drakon,</p>
<p>danke dir für Deine Antwort. Warum denkst du, dass es mit Standardcontainern besser wäre? Du meinst damit sicher die STL, oder nicht?</p>
<p>Was meinst du eigentlich mit dem Ausdruck Flaschenhals?</p>
<p>Danke dir!<br />
V.K.</p>
</blockquote>
<p>Naja. Die STL ist weitaus sicherer und unter Umständen effizienter.</p>
<p>Mit Flschenhals meine ich die Stelle, die wirklich am meisten Probleme macht. Also am meisten Zeit braucht bei der Verwendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528994</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 14 Jun 2008 13:40:29 GMT</pubDate></item></channel></rss>