Kevin,
A large number fo the limitations are available from the LIMIT command - noting that exact values may vary between platform and version:
:LIMIT
U_MAXFNAME: Unix file name limit = 118.
U_NAMESZ: Record id(key) size = 126.
U_SELEMAX: Number of select list = 10.
U_MAXDATA: Number of DATA statement = 500.
U_HEADSZ: HEADER/FOOTER length = 2120.
U_MAXHASHTYPES: Number of hash functions = 4.
U_MAXSORT: Number of sort fields(BY...) in LIST = 20.
U_MAXWITH: WITH stack size = 512.
U_MAXWHEN: WHEN stack size = 60.
U_MAXCAL: Number of SUM+AVG+PCT+CAL in LIST = 54.
U_MAXBREAK: Number of BREAK.ON+BREAK.SUP in LIST = 15.
U_MAXLIST: Number of attribute names in LIST = 999.
U_LISTATTR: Number of attribute symbols in LIST = 250.
U_LINESZ: Page width in printing = 272.
U_PARASIZE: Paragraph name and its parameter size = 256.
U_LPCMD: System spooler name = lp -c.
U_MAXPROMPT: Number of prompts allowed in paragraph =60.
U_FSIZE: Dictionary field name size = 31.
U_MAXVALUE: Number of values WHEN can handle = 10240.
U_SENTLEN: Maximum sentence length = 9247.
U_PROCBUFSZ: Proc buffer size = 8191.
U_NIDES: Maximum number of virtual fields in query= 256.
:
As far as memory usage as a whole, 32-bit UniData (now EOL) had a 2Gb limit per process, whereas 64-bit UniData (all current versions) has a limit that for all practical purposes can be treated as infinite - 9,223,372,036,854,775,808. Noting that Operating System limitations rule, so if on UNIX and ulimit is lower, then that is the imposed limit.
The 'udtconfig' file is also worth checking for internal configurables and dependencies.
Regards
JJ