The short answer to pretty much all of these is that (at least in a portable way that's really defined by C itself) you can't.
Address lines, for example, is a particularly tough one. Just for example, quite a DSPs have two or even three completely separate address spaces connected to an equal number of physical memory channels -- and each will potentially have a unique size. Along with that, even if there are N address lines on the processor, there may (and often will) be less memory than that actually connected.
That said, sizeof(void *) * CHAR_BIT
will usually give at least a reasonable approximation of the number of address lines -- at least the number theoretically allowed by the architecture, though the amount of addressable memory may well differ.
The standard says int
is supposed to be the "natural size suggested by the processor". More often than not (but definitely not always) that's the same as the size of the processors integer registers.