Use of "static" with "RTClib"
You wrote:


  DateTime now = rtc.now();

  
  Thus, with every iteration of loop() "now" gets defined anew (on the
  heap?!), right?


No. Local variables like this are usually allocated on the stack,
although the compiler may keep them in CPU registers if that helps
optimization.


  static DateTime now;    // static declaration, executed only once

  
  In this case "new" should be allocated on the stack like a global
  variable, right?


No. It is allocated statically, in the .bss section, like uninitialized
global variables.


  I want to use "static" to increase overall performance by reducing
  work for the processor


Not sure it will make much difference. Static allocation may save you a
few CPU instructions compared to stack allocation (the instructions that
move the stack pointer). On the other hand, it will cost you a few
instructions compared to register allocation (the instructions to access
the RAM).


  avoiding heap fragmentation


Stack allocation does not use the heap, and the stack never fragments.


  Does this make sense or will it cause more problems than it solves?


If you really care about sub-microsecond differences in the execution
time, you should either look and the disassembly of the program, or do
some benchmarking. Otherwise just write whatever makes more sense from
the point of view of the program's logic: does the variable need to keep
its value across calls to loop()? If the answer is “no”, do not use
static.