Index: /trunk/src/VBox/Devices/Audio/HDAStream.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/HDAStream.cpp	(revision 87266)
+++ /trunk/src/VBox/Devices/Audio/HDAStream.cpp	(revision 87267)
@@ -1018,5 +1018,4 @@
     uint32_t cbLeft      = cbToProcess;
 
-    uint8_t abChunk[HDA_FIFO_MAX + 1];
     while (cbLeft)
     {
@@ -1040,4 +1039,5 @@
         uint32_t   cbDMA    = 0;
         PRTCIRCBUF pCircBuf = pStreamR3->State.pCircBuf;
+        uint8_t   *pabFIFO  = pStreamShared->abFIFO;
 
         if (hdaGetDirFromSD(uSD) == PDMAUDIODIR_IN) /* Input (SDI). */
@@ -1059,5 +1059,5 @@
                     break;
 
-                memcpy(abChunk + cbDMAWritten, pvBuf, cbBuf);
+                memcpy(pabFIFO + cbDMAWritten, pvBuf, cbBuf);
 
                 RTCircBufReleaseReadBlock(pCircBuf, cbBuf);
@@ -1074,9 +1074,9 @@
 
                 Assert(cbChunk == cbDMAWritten + cbDMAToWrite);
-                memset((uint8_t *)abChunk + cbDMAWritten, 0, cbDMAToWrite);
+                memset((uint8_t *)pabFIFO + cbDMAWritten, 0, cbDMAToWrite);
                 cbDMAWritten = cbChunk;
             }
 
-            rc = hdaR3DMAWrite(pDevIns, pThis, pStreamShared, pStreamR3, abChunk, cbDMAWritten, &cbDMA /* pcbWritten */);
+            rc = hdaR3DMAWrite(pDevIns, pThis, pStreamShared, pStreamR3, pabFIFO, cbDMAWritten, &cbDMA /* pcbWritten */);
             if (RT_FAILURE(rc))
                 LogRel(("HDA: Writing to stream #%RU8 DMA failed with %Rrc\n", uSD, rc));
@@ -1088,5 +1088,5 @@
             STAM_PROFILE_START(&pThis->StatOut, a);
 
-            rc = hdaR3DMARead(pDevIns, pThis, pStreamShared, pStreamR3, abChunk, cbChunk, &cbDMA /* pcbRead */);
+            rc = hdaR3DMARead(pDevIns, pThis, pStreamShared, pStreamR3, pabFIFO, cbChunk, &cbDMA /* pcbRead */);
             if (RT_SUCCESS(rc))
             {
@@ -1112,5 +1112,5 @@
                         if (cbBuf)
                         {
-                            memcpy(pvBuf, abChunk + cbDMARead, cbBuf);
+                            memcpy(pvBuf, pabFIFO + cbDMARead, cbBuf);
                             cbDMARead += (uint32_t)cbBuf;
                             cbDMALeft -= (uint32_t)cbBuf;
@@ -1160,5 +1160,5 @@
                         }
 
-                        uint8_t *pbSrcBuf = abChunk;
+                        uint8_t *pbSrcBuf = pabFIFO;
                         size_t cbSrcOff   = pMap->offNext;
 
@@ -1558,10 +1558,11 @@
             if (cbSinkReadable)
             {
-                uint8_t abFIFO[HDA_FIFO_MAX + 1];
+                uint8_t *pabFIFO = pStreamShared->abFIFO;
+
                 while (cbSinkReadable)
                 {
                     uint32_t cbRead;
                     rc2 = AudioMixerSinkRead(pSink, AUDMIXOP_COPY,
-                                             abFIFO, RT_MIN(cbSinkReadable, (uint32_t)sizeof(abFIFO)), &cbRead);
+                                             pabFIFO, RT_MIN(cbSinkReadable, (uint32_t)sizeof(pStreamShared->abFIFO)), &cbRead);
                     AssertRCBreak(rc2);
 
@@ -1574,5 +1575,5 @@
                     /* Write (guest input) data to the stream which was read from stream's sink before. */
                     uint32_t cbWritten;
-                    rc2 = hdaR3StreamWrite(pStreamR3, abFIFO, cbRead, &cbWritten);
+                    rc2 = hdaR3StreamWrite(pStreamR3, pabFIFO, cbRead, &cbWritten);
                     AssertRCBreak(rc2);
                     AssertBreak(cbWritten > 0); /* Should never happen, as we know how much we can write. */
Index: /trunk/src/VBox/Devices/Audio/HDAStream.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/HDAStream.h	(revision 87266)
+++ /trunk/src/VBox/Devices/Audio/HDAStream.h	(revision 87267)
@@ -211,4 +211,6 @@
     /** FIFO Watermark. */
     uint16_t                    u16FIFOW;
+    /** FIFO scratch buffer, to avoid intermediate (re-)allocations. */
+    uint8_t                     abFIFO[HDA_FIFO_MAX + 1];
     /** Last Valid Index (SDnLVI).
      *  Will be updated in hdaR3StreamInit(). */
