for _practical_ purposes, a 32bit PE file is normally limited to be about 1.7GB because that's about what's left in the 32bit version of Windows once all its system stuff is loaded. That's the case even if the PE is marked as being large address aware because it still needs to fit entirely in the low area of the process (the part that is below ntdll, kernel32, etc)
A 64bit PE file is a different thing. Those can normally reach 4GB _BUT_ the code section cannot exceed 2GB because the PE format uses 31 bit offsets for some tables, e.g, the import table. The resource section is also limited to 2GB because the offset to directory is also a 31 bit offset. Those are two 31 bit offsets in the PE format that come to mind, if there are others, I cannot think of them at this time.