Do we need to defrag the card memory?

I have the G8800 GTX card that has 768 MB(?) memory. The data that I am manipulating is much more than that. (>16 GB).
Along with that the operations I perform require various other sets of data that I need to transfer onto the card.
I do this by allocating memory of the size I need for that operation, copying my data to the device, retrieving the results from the device and then freeing the memory that I wont need next.

My question is that, since I keep transferring these chunks of data of unequal sizes would there be a situation where there is enough free space to allocate but because it is not contigous, the card refuses the allocation request.

Would I need to run sort of a ‘defrag’ on the memory?

The easiest way to solve this is to allocate large chunks of memory at the beginning of your program, then manage this yourself in pools.