did you take a look at the "mapfile" generated by linker (on request only, nodemcu linker call does generate it by default)
to see what does actually consume iram?
At least interrupt code and flash controller code will have to go to iram AFAIK.
But I don't have numbers how much is occupied by the SDK code alone where we don't have control.
Cal