Edge memory is more like C language's "heap" and its usage is sparse and fragmented - so "usage" does not apply (you could have just 1K of the 32K "used" and not be able to use ANY delta contacts if the single bit usage was every 32 DWORDS, e.g. E0, E32, E64, E96, etc.).
It does not get optimized - although we could definitely do that on a PROGRAM mode download. We could definitely make that be a Project option, default would be to OPTIMIZE edge bit usage when doing PROGRAM MODE download.
That would free up some. However, Delta contacts burn 32 contiguous edge bits on a DWORD boundary (e.g. E32:SD/R then E64:SD/R), so there must be a contiguous set of 32 bits that are unallocated on a DWORD boundary.
Even if you have no other edge bits and every edge bit is available, you can only have at most around 1000 delta contacts (32x1000 bits)